gpt4 book ai didi

php - 用于搜索的最佳 MySQL 整理

转载 作者:行者123 更新时间:2023-11-30 22:11:44 25 4
gpt4 key购买 nike

我已经使用 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'

关于php - 用于搜索的最佳 MySQL 整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39912887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com