簡體   English   中英

用於搜索的最佳MySQL整理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM