編輯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