提问人:Adrian Abdul-Bahá 提问时间:11/23/2022 更新时间:11/25/2022 访问量:205
Laravel 9.x 中的编码 — 由于错误匹配特殊字符,验证失败
Encoding in Laravel 9.x — Validation fails due to incorrectly matching special characters
问:
我之前问过一个关于我在 Laravel 中遇到的编码问题的问题。也就是说,我对 ʔamal 的数据库查询将 ʔāmāl 作为有效结果返回——也就是说,不同的字符 a 和 ā 被解释为等效。这似乎是数据库表编码的问题。有人建议我把它改成utf8mb4_unicode_ci,这在当时似乎有效。
但是,我仍然遇到一个非常类似的问题——这次是验证。我正在创建一个字典,所以每个术语页面的蛞蝓自然应该是唯一的。但是现在我已经创建了单词 mīn,应用程序不允许我创建单词 min(即它不考虑 .../mīn 和 .../min 不同)。我还第一次注意到,例如,如果我导航到 .../wēn 并手动将地址更改为 .../温(一个不存在的单词),它仍然会显示术语 wēn 的页面。
在讨论编码之前,这是否在某种程度上只是浏览器行为的问题等等?我的意思是,有没有办法要求我的应用程序考虑 .../mīn 和 .../min 不同?如果是这样的话,有人可以澄清一下如何做到这一点吗?
答:
ā
= a
在几乎所有的 UTF8MB4 排序规则中,即使是非常旧的 .utf8_general_ci
因此,我声称,除非您使用其中之一,否则 MySQL 将 a-macron 视为与大多数其他“a”相同。
utf8_bin
utf8mb4_bin
utf8mb4_0900_as_ci -- and any other %_as_% collation
_bin
说要比较位;
意思是“口音敏感”_as_
在应用程序代码和浏览器中,可能还有其他规则。他们可能正在治疗 = .a
ā
更多
要测试特定比较的特定排序规则,请执行以下操作:
SELECT 'a' = 'ā' COLLATE utf8mb4_0900_as_ci;
返回 1 表示他们受到平等对待;如果不是,则为 0。 注意:这假定您以其他方式使用 .还有功能。CHARACTER SET utf8mb4
WEIGHT_STRING()
评论
LENGTH()
CHAR_LENGTH()
评论