【发布时间】:2011-11-15 15:53:20
【问题描述】:
编辑 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' 对 CHARACTER SET 'binary' 无效”。但我不明白为什么字符集应该是二进制的。
【问题讨论】: