首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'ae‘与’ae‘的MySQL比较

'ae‘与’ae‘的MySQL比较
EN

Stack Overflow用户
提问于 2022-03-02 12:09:09
回答 2查看 72关注 0票数 1

我的MySQL服务器在将数据存储到数据库时不识别字符'ae‘和’ae‘之间的区别,这给我带来了一些问题。我的目标是找到一个字符集来识别这些字符之间的区别,我找到了它(utfmb3),但是它将被废弃,而新的选择(utfmb4)不承认这些字符是不同的。

我试过的是:

代码语言:javascript
运行
复制
set names 'utf8mb3';
select 'æ' = 'ae';

这个select返回0 (false),这意味着这个字符集将这些字符看作不同的字符,这正是我所需要的,但是MySQL给了我一个警告:'utf8mb3‘是不推荐的,并将在以后的发行版中删除。请改用utf8mb4

但当我做的时候

代码语言:javascript
运行
复制
set names 'utf8mb4';
select 'æ' = 'ae';

此选择返回1,这意味着utf8mb4将这些字符视为相同的字符,这不是很好。

所以,我的迪莱玛是,使用什么字符集?如果我使用utfmb3,它很快就会被废弃,这是不好的。如果我使用utfmb4,这将不能正常工作。

EN

回答 2

Stack Overflow用户

发布于 2022-03-02 12:52:56

=LIKE比较在WHERE子句中应用排序规则(而不仅仅是字符集)来确定这种相等性。该语句对前两个排序规则返回零,对于第二个排序规则返回一个。

代码语言:javascript
运行
复制
SELECT 'æ' = 'ae' COLLATE utf8mb4_unicode_ci,       -- 0
       'æ' = 'ae' COLLATE utf8mb4_general_ci,       -- 0
       'æ' = 'ae' COLLATE utf8mb4_unicode_520_ci,   -- 1
       'æ' = 'ae' COLLATE utf8mb4_german2_ci        -- 1

您的默认排序规则很可能是最后两个或其他排序规则中的一个,它以您不想要的方式处理等式测试。

您可以使用此语句查看连接的排序规则设置。我怀疑是utf8mb4_unicode_520_ci

代码语言:javascript
运行
复制
SELECT @@collation_connection;

确保用您想要的列来定义列的排序规则,并将连接排序规则设置为相同的内容。utf8mb4_unicode_ci是适宜的。尝尝这个。

代码语言:javascript
运行
复制
SET collation_connection = 'utf8mb4_unicode_ci';
SELECT 'æ' = 'ae'   -- 0;

如果不更好地理解你的语言需求,就很难给出更具体的建议。

更多信息在这里:Difference between utf8mb4_unicode_ci and utf8mb4_unicode_520_ci collations in MariaDB/MySQL?

票数 2
EN

Stack Overflow用户

发布于 2022-03-02 12:34:04

联盟'utf8mb4_unicode_ci‘是当前您想要使用的。确保您正在设置客户端(即php,节点)。也使用正确的字符集(在db客户端对象和环境配置中)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71322451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档