非常规字符的字符串值错误



所以我使用包装器从instagram获取用户数据。我想为用户选择显示名称,并将它们存储在MYSQL数据库中。我在插入一些显示名称时遇到了问题,特别是处理不正确的字符串值错误:

现在,我已经处理过这个问题重音标记,字母的变音符等。解决方案是将utf8字符集下的排序规则更改为utf8_general_ci

如你所见,我拉出的一些显示名有非常独特的字符我不确定mySQL是否能识别,例如:
ᛘ𝕰𝖆𝖗𝖙𝖍 𝕾𝖕𝖎𝖗𝖎𝖙𝖚𝖘𐂂®

所以我收到:

Error Code: 1366. Incorrect string value: 'xF0x9Dx99x87xF0x9D...' for column 'dummy' at row 1

这是我的sql代码

CREATE TABLE test_table(
id INT AUTO_INCREMENT,
dummy VARCHAR(255),
PRIMARY KEY(id)
);

INSERT INTO test_table (dummy)
VALUES ('ᛘ𝕰𝖆𝖗𝖙𝖍 𝕾𝖕𝖎𝖗𝖎𝖙𝖚𝖘𐂂®');

有什么合适的字符集+排序对可以处理这样的字符吗?我不知道去哪里找解决方案,所以我来这里看看是否有人处理过这个问题。

注:,我已经尝试了utf8mb4字符集与utf8mb4_unicode_ciutf8mb4_bin排序以及。

显示的字符要求列使用utf8mb4编码。目前,您的列似乎是用utf8mb3编码定义的。

MySQL使用名称"utf8"很复杂,如https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html:

所述

注意

历史上,MySQL使用utf8作为utf8mb3的别名;从MySQL 8.0.28开始,输出中只使用utf8mb3SHOW语句和信息模式表中字符集的意思是

在将来的某个时刻,utf8有望成为对utf8mb4。为了避免对utf8的含义产生歧义,请考虑为字符集引用显式指定utf8mb4,而不是use utf8 .

您还应该注意,不赞成使用utf8mb3字符集你应该期待它在未来的MySQL版本中被删除。请用utf8mb4代替。

您可能已经尝试通过以下方式更改您的表:

ALTER TABLE test_table CHARSET=utf8mb4;

但是,这只会更改默认字符集,以便在随后向表中添加新列时使用。它不会更改任何当前列。

ALTER TABLE test_table MODIFY COLUMN dummy VARCHAR(255) CHARACTER SET utf8mb4;

或者在一条语句中转换表中的所有字符串或TEXT列:

ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4;

那就是𝙇- L MATHEMATICAL SANS-SERIF黑体斜体大写L

甚至需要utf8mb4字符集来表示它。"F0"是线索;它是4字节UTF-8字符中4个字节中的第一个。它不能在MySQL的"utf8"中表示。排序(大部分)是不相关的。

大多数(不是全部)ᛘ𝕰𝖆𝖗𝖙𝖍 𝕾𝖕𝖎𝖗𝖎𝖙𝖚𝖘𐂂®中的字符也需要utf8mb4。它们是"数学粗体";字母。

(与此同时,比尔给了你更多的答案。)

相关内容

  • 没有找到相关文章

最新更新