一般错误:3988 参数无法从排序规则 utf8_unicode_ci 转换为 utf8mb4_0900_ai_ci

问题描述 投票:0回答:3

我正在尝试在文本类型列中保存包含电子邮件 html 的字符串。但我收到这个错误。我没能找到不兼容的字符在哪里。我可以使用任何消毒方法将所有

utf8_unicode_ci
转换为
utf8mb4_0900_ai_ci

mysql laravel collation utf8mb4
3个回答
0
投票

您可以在插入正确的排序规则之前转换文本

SELECT CONVERT('abc' USING utf8mb4)  COLLATE  utf8mb4_0900_ai_ci;

0
投票

我的具体问题实际上是由 PHP substr 引起的。

echo substr('ããããã', 0, 5);
//ãã�

它使用utf8_encode,获取子字符串,然后使用utf8_decode。在此示例中,字符串“ããããã”在内部调用 utf8_encode 后变为“à£à£à£àà”,然后通过 substr 裁剪为“à£àà”,当应用 utf8_encode 时,它最终为“呀呀”。

我使用 Laravel helper substr 而不是 php 解决了这个问题。


0
投票

插入十六进制字符也存在类似的问题。

只需更改数据库连接的编码即可(answer):

$conn->set_charset('utf8mb4'); // for mysqli
$dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
//                                       ^^^^^^^^^^^^^^^ for PDO

使用框架时,此设置在配置文件中指定。

我的编码是utf8,将其更改为utf8mb4后一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.