提问人:user3607534 提问时间:2/11/2023 更新时间:2/12/2023 访问量:310
如何在MySQL表中存储表情符号?尝试了一切
How to store emojis in a MySQL table? Tried everything
问:
我有一个CSV文件,其中包含带有表情符号的推文(例如。“太酷了!💕 “),我需要将它们导入 MySQL 表中,以便它们能够正确保存/显示...... 我必须设置什么以及如何正确导入(我的意思是排序规则等)?
更多详情:
- 在 CSV 文件中,表情符号是可见的
- CSV 文件的编码为 UTF-8
- 我在 Windows 11 上
我已经试过了:
- 在表中将字符集设置为 utf8mb4 并将排序规则设置为utf8mb4_unicode_ci
- 添加“ SET NAMES 'utf8mb4';”(也尝试过 Latin1) 在 LOAD 查询之前
答:
1赞
Bill Karwin
2/12/2023
#1
该表必须以字符集 utf8mb4 对文本进行编码才能存储表情符号。
演示:
mysql> create table no ( t text ) character set=utf8;
mysql> load data local infile 'm.csv' into table no;
mysql> select * from no;
+---------+
| t |
+---------+
| Cool! ? |
+---------+
所以 utf8 不支持表情符号。
mysql> create table yes ( t text ) character set=utf8mb4;
mysql> load data local infile 'm.csv' into table yes;
mysql> select * from yes;
+------------+
| t |
+------------+
| Cool! 💕 |
+------------+
但是 utf8mb4 确实支持表情符号。不同之处在于 utf8mb4 支持 4 字节编码,而 utf8 不支持。这是 MySQL 历史上一个不幸的部分,他们最初没有实现 utf8 来支持 UTF-8 标准的补充多语言平面。
让我们看看更改第一个表是否有帮助。
mysql> alter table no character set utf8mb4;
mysql> load data local infile 'm.csv' into table no;
mysql> select * from no;
+---------+
| t |
+---------+
| Cool! ? |
| Cool! ? |
+---------+
为什么这不起作用?因为不转换现有列。它只会更改表的默认字符集,直到我们下次向该表添加列时才会使用该字符集。alter table ... character set
我们可以看到现有列仍在使用旧字符集:
mysql> show create table no\G
*************************** 1. row ***************************
Table: no
Create Table: CREATE TABLE `no` (
`t` text CHARACTER SET utf8mb3
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
utf8mb3 是 MySQL 8.0 中的别名字符集。utf8
若要转换现有列,请使用:
mysql> alter table no convert to character set utf8mb4;
mysql> show create table no\G
*************************** 1. row ***************************
Table: no
Create Table: CREATE TABLE `no` (
`t` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
否,再次尝试加载:
mysql> load data local infile 'm.csv' into table no;
mysql> select * from no;
+------------+
| t |
+------------+
| Cool! ? |
| Cool! ? |
| Cool! 💕 |
+------------+
请注意,有一天,MySQL 可能会将“utf8”别名更改为 utf8mb4。这在上述许多“utf8”用法的警告中显示出来:
“utf8”目前是字符集UTF8MB3的别名,但在将来的版本中将是UTF8MB4的别名。请考虑使用UTF8MB4以明确无误。
评论
SHOW CREATE TABLE
SELECT HEX(col)...