[英]Best MySQL collate for search
我用PHP和MySQL實現了搜索。 目前我桌子的整理是"utf8_unicode_ci"
。 問題是,通過這種整理"ä" = "a"
是。 如果我將整理更改為"utf_bin"
一切正常,但整理並不具體。
所以我希望兩者都不用"upper"
或"lower"
改變SQL或PHP代碼:)
我搜索的最佳MySQL整理是什么?
通常,您不能這樣做,並且在代碼中使用lower
是一種適用於所有類型字符和語言的安全方法。 對於某些語言,有專門的排序規則可以支持您的比較,但可能會有一些並發症。 對於'ä' = 'Ä' != 'A'
,您可以使用utf8_german2_ci
( 德語電話簿訂購 )。 它會在比較中將以下字符視為相等:
Ä = Æ = AE
Ö = Œ = OE
Ü = UE
ß = ss
但是比較 (例如=, <, >
)字面意思是:因為整理實際上與排序有關,這種整理具有'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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.