我的MySQL服务器在将数据存储到数据库时不识别字符'ae‘和’ae‘之间的区别,这给我带来了一些问题。我的目标是找到一个字符集来识别这些字符之间的区别,我找到了它(utfmb3),但是它将被废弃,而新的选择(utfmb4)不承认这些字符是不同的。
我试过的是:
set names 'utf8mb3';
select 'æ' = 'ae';这个select返回0 (false),这意味着这个字符集将这些字符看作不同的字符,这正是我所需要的,但是MySQL给了我一个警告:'utf8mb3‘是不推荐的,并将在以后的发行版中删除。请改用utf8mb4
但当我做的时候
set names 'utf8mb4';
select 'æ' = 'ae';此选择返回1,这意味着utf8mb4将这些字符视为相同的字符,这不是很好。
所以,我的迪莱玛是,使用什么字符集?如果我使用utfmb3,它很快就会被废弃,这是不好的。如果我使用utfmb4,这将不能正常工作。
发布于 2022-03-02 12:52:56
=和LIKE比较在WHERE子句中应用排序规则(而不仅仅是字符集)来确定这种相等性。该语句对前两个排序规则返回零,对于第二个排序规则返回一个。
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。
SELECT @@collation_connection;确保用您想要的列来定义列的排序规则,并将连接排序规则设置为相同的内容。utf8mb4_unicode_ci是适宜的。尝尝这个。
SET collation_connection = 'utf8mb4_unicode_ci';
SELECT 'æ' = 'ae' -- 0;如果不更好地理解你的语言需求,就很难给出更具体的建议。
更多信息在这里:Difference between utf8mb4_unicode_ci and utf8mb4_unicode_520_ci collations in MariaDB/MySQL?
发布于 2022-03-02 12:34:04
联盟'utf8mb4_unicode_ci‘是当前您想要使用的。确保您正在设置客户端(即php,节点)。也使用正确的字符集(在db客户端对象和环境配置中)。
https://stackoverflow.com/questions/71322451
复制相似问题