所以我使用包装器从instagram获取用户数据。我想为用户选择显示名称,并将它们存储在MYSQL数据库中。我在插入一些显示名称时遇到了问题,特别是处理不正确的字符串值错误:
现在,我已经处理过这个问题重音标记,字母的变音符等。解决方案是将utf8
字符集下的排序规则更改为utf8_general_ci
。
ᛘ𝕰𝖆𝖗𝖙𝖍 𝕾𝖕𝖎𝖗𝖎𝖙𝖚𝖘𐂂®
所以我收到:
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_ci
和utf8mb4_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。它们是"数学粗体";字母。
(与此同时,比尔给了你更多的答案。)