我已經使用PHP和MySQL實現搜索。目前我桌子的整理是"utf8_unicode_ci"
。問題是,用這個排序規則"ä" = "a"
是。如果我將整理更改爲"utf_bin"
一切正常,但整理不是事例性的。搜索的最佳MySQL整理
所以我想都沒有改變SQL或PHP代碼"upper"
或"lower"
:)
什麼是最好的MySQL整理我的搜索?
我已經使用PHP和MySQL實現搜索。目前我桌子的整理是"utf8_unicode_ci"
。問題是,用這個排序規則"ä" = "a"
是。如果我將整理更改爲"utf_bin"
一切正常,但整理不是事例性的。搜索的最佳MySQL整理
所以我想都沒有改變SQL或PHP代碼"upper"
或"lower"
:)
什麼是最好的MySQL整理我的搜索?
一般情況下,您不能這樣做,並且在您的代碼中使用lower
是適用於所有類型字符和語言的安全方法。對於某些語言,有專門的排序規則可以支持您的比較,但可能會有一些複雜的問題。對於'ä' = 'Ä' != 'A'
,您可以使用utf8_german2_ci
(德國電話簿訂購)。它將把下列字符作爲平等的比較:
Ä = Æ = AE
Ö = Œ = OE
Ü = UE
ß = ss
但比較(如=, <, >
)的字面意思是:因爲排序規則實際上涉及到排序,該排序規則有奇怪sideeffect是'AE' = 'Ä'
,但不'AE' like 'Ä'
!在您的代碼中考慮可能比僅僅在所有地方添加lower
更困難,並且可能會在稍後導致一些大腦扭曲效應。但是,如果你能忍受這一點,並且你不需要支持其他特殊字符而不只是德語變音符號(例如'à'
,'á'
和'å'
仍然會被視爲'a'
),那麼你可以嘗試一下。
實施例:
create table germanumlaut (
word varchar(20) collate utf8_german2_ci
);
insert into germanumlaut (word)
values ('Ä'), ('ä'), ('A'), ('á'), ('AE');
select * from germanumlaut where word = 'A';
-- result: 'A', 'á', as 'á' is not a german umlaut and treated as 'a'
select * from germanumlaut where word = 'Ä';
-- result: 'Ä', 'ä', 'AE', as 'AE' = 'Ä'
select * from germanumlaut where word > 'Ad';
-- result: 'Ä', 'ä', 'AE', as 'Ä' = 'AE'
select * from germanumlaut where word like 'A';
-- result: 'A', 'á'
select * from germanumlaut where word like 'Ä';
-- result: 'Ä', 'ä'
select * from germanumlaut where word like 'A%';
-- result: 'A', 'á', 'AE'
[_this_](http://mysql.rjweb.org/utf8_collations.html)指出,german2,冰島,丹麥,愛沙尼亞語,斯洛伐克語和瑞典是唯一UTF8歸類把'Ä'視爲不等於'A'。 –