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