McB*_*McB 3 mysql collation character-set encoding
我有一个术语数据库,由一组用户添加到其中,并由另一组用户查询。
\n\n当人们在数据库中查询表情符号并且我的 React 应用程序会抛出错误(奇怪的是 CORS 错误,但这是一个不同的问题)时,我遇到了问题。我最终通过将表的字符集更改为utf8mb4
带有utf8mb4_unicode_ci
排序规则来解决这个问题。
现在,我在添加新术语时遇到错误,例如,“beyonc\xc3\xa9”的重复行已存在。但是,当我在数据库中查询“beyonc\xc3\xa9”时,它返回其中包含“beyonce”的行。是否有字符集和排序规则的组合可以正确处理这个问题?
\n\n我的数据库是在 Amazon RDS 上运行的 MySQL 5.6.40。
\n\n\n\n当人们在数据库中查询表情符号并且我的 React 应用程序会抛出错误时,我遇到了问题
\n
确切的错误消息是什么?utfmb4
在将其更改为and之前,该列的字符集和排序规则是什么utf8mb4_unicode_ci
?在 MySQL 中,可以在多个级别设置排序规则,包括客户端连接。
也就是说,Unicode(utf8
Unicode 编码之一)支持所有字符。如果您的字符集确实是utf8mb4
,则无需更改。
你说:
\n\n\n\n\n添加新术语时出现错误,例如“beyonc\xc3\xa9”的重复行已存在,但是当我在数据库中查询“beyonc\xc3\xa9”时,它返回带有“beyonce”的行“ 在里面。
\n
MySQL文档指出:
\n\n\n\n\n对于未指定区分重音的非二进制排序规则名称,它由区分大小写决定。如果排序规则名称不包含
\n_ai
or_as
,_ci
则在名称暗示_ai
和_cs
名称暗示中_as
。
因此,由于您的排序规则是utf8mb4_unicode_ci
,那么它既不区分大小写,也不区分重音。这就是为什么“beyonc\xc3\xa9”与“beyonce”匹配。
如果您需要将“beyonc\xc3\xa9”和“beyonce”视为不同,那么理想情况下您将使用区分大小写(以及明确声明或暗示区分重音)的排序规则。然而,看起来这在 MySQL 5.6(甚至 5.7)中不可用,而 MySQL 8.0 确实有utf8mb4_0900_as_cs
, 或者即使utf8mb4_0900_as_ci
您只想用重音来区分值,同时允许“beyonce”和“Beyonce”匹配。
因此,目前看来您可能需要使用二进制排序规则 ,utf8mb4_bin
方法是更改列的排序规则,或者添加COLLATE utf8mb4_bin
到一个或多个查询。
归档时间: |
|
查看次数: |
3854 次 |
最近记录: |