gpt4 book ai didi

MySQL 的 INSTR 和排序规则

转载 作者:行者123 更新时间:2023-11-29 01:04:42 24 4
gpt4 key购买 nike

编辑 3:好的,忘掉下面所有复杂的东西。我的问题很简单:为什么下面结果集的第二列是0,而其他列都是1。

SELECT 'a' = 'á',
INSTR('András','Andras'),
'András' LIKE 'Andras',
INSTR('András','Andräs')

数据库和连接设置为utf8。

结束编辑

我遇到了 MySQL 的 INSTR 函数的问题。我有一个带有归类 utf8_general_ci 的表“值”和一个包含值“András Schiff”的 VARCHAR 列“值”。现在我执行以下查询:

> SET NAMES 'utf8' COLLATE 'utf8_general_ci'
> SELECT 'a' = 'á';
1
> SELECT * FROM values WHERE value LIKE '%Andras%'
'András'
> SELECT * FROM values WHERE INSTR(value,'Andras')
(Empty)
> SELECT * FROM values WHERE INSTR(value,'Andräs')
'András'

谁能解释这种奇怪的行为?我认为 LIKE '%...%' 和 INSTR 是等价的,后者的优点是搜索字符串可能包含 '%'。

谢谢

编辑:我的 MySQL 版本是 Ver 14.14 Distrib 5.1.54,适用于使用 readline 6.2 的 debian-linux-gnu (x86_64)

编辑 2:我注意到的另一件事:

> SELECT * FROM values WHERE INSTR(value,'Andras') COLLATE 'utf8_unicode_ci'

给出错误“COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'binary'”。但是我不明白为什么字符集应该是二进制的。

最佳答案

解决有关 INSTR 和 COLLATE 的 Edit 2 部分

以下语法对我有用

SELECT * FROM values WHERE INSTR(value COLLATE utf8_unicode_ci,'Andras')

关于MySQL 的 INSTR 和排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com