编辑3:好的,忘记下面所有复杂的东西。而所有其他列1.MySQL的INSTR和排序规则
SELECT 'a' = 'á',
INSTR('András','Andras'),
'András' LIKE 'Andras',
INSTR('András','Andräs')
数据库和连接设置为utf8为什么以下结果的第二列设置0:我的问题是,因为这容易。
END编辑
我有一个MySQL的INSTR函数的问题。我有一个包含排序规则utf8_general_ci的表'值'和一个包含值'AndrásSchiff'的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的版本是版本14.14 DISTRIB 54年5月1日,使用readline的6.2
EDIT 2 Debian的Linux-GNU(x86_64的):另一件事我注意到:
> SELECT * FROM values WHERE INSTR(value,'Andras') COLLATE 'utf8_unicode_ci'
给出错误“COLLATION'utf8_unicode_ci'对于CHARACTER SET'binary'”无效。但我不明白为什么字符集应该是二进制的。
的[INSTR(STR,SUBSTR)不会当STR包含 'E' 或工作“可能重复''和substr只'e'](http://stackoverflow.com/questions/20923186/instrstr-substr-does-not-work-when-str-contains-e-or-e-and-substr-only- e) – Ben