'æ'和'ae'之间的MySQL比较



我的MySQL服务器在将数据存储到数据库时无法识别字符"æ"one_answers"ae"之间的差异,这给我带来了一些问题。我的目标是找到一个可以识别这些字符之间差异的字符集,我找到了它(utfmb3(,但它将被弃用,而新的替代方案(utfmb4(没有将这些字符识别为不同的字符。

我尝试过的:

set names 'utf8mb3';
select 'æ' = 'ae';

这个select返回0(false(,这意味着这个字符集将这些字符视为不同的字符,这正是我所需要的,但MySQL给了我一个警告:"utf8mb3"已弃用,并将在将来的版本中删除。请改用utf8mb4

但当我做时

set names 'utf8mb4';
select 'æ' = 'ae';

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

那么,我的问题是,用什么字符集?如果我使用utfmb3,它很快就会被弃用,这不好。如果我使用utfmb4,它将无法正常工作。

WHERE子句中的

=LIKE比较应用排序规则(而不仅仅是字符集(来确定这种相等性。此语句对前两个排序规则返回零,对后两个排序顺序返回一。

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;

请确保为列定义所需的排序规则,并将连接排序规则设置为相同的排序规则。CCD_ 9是合适的。试试这个。

SET collation_connection = 'utf8mb4_unicode_ci';
SELECT 'æ' = 'ae'   -- 0;

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

更多信息请点击此处:MariaDB/MySQL中的utf8mb4_unicode_ci和utf8mb 4_unicode_520_ci排序规则之间的区别?

联盟'utf8mb4_unicode_ci'是当前要使用的联盟。确保您将客户端(即php、node.python(设置为也使用正确的字符集(在db客户端对象和环境配置中(。

相关内容

  • 没有找到相关文章

最新更新