MySQL 可以 select 文字表情符号,但不会将表情符号存储到 table
MySQL can select litral emoji but wont store emoji into table
我正在尝试将一些表情符号字符插入 MySQL 中的 table,但值存储为问号 (????)。
我确保使用正确的 utf8mb4
编码创建数据库:
mysql> describe users;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(191) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
然后我试图确定 MySql 是否理解表情符号,所以我这样做了:
mysql> select '';
+------+
| |
+------+
| |
+------+
1 row in set (0.00 sec)
然后我这样做了:
mysql> insert into users (name) values ('');
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> select * from users;
+----+------------+
| id | name |
+----+------------+
| 21 | فاضل |
| 30 | سلاحف |
| 46 | ???? |
| 47 | ???? |
| 48 | ???? |
| 49 | ???? |
+----+------------+
6 rows in set (0.01 sec)
我不知道该怎么做才能解决这个问题..
** 编辑 ** :根据评论中的要求,我 运行 以下命令:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+-------------------------+
| Variable_name | Value |
+--------------------------+-------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /static/share/charsets/ |
+--------------------------+-------------------------+
8 rows in set (0.00 sec)
您的连接设置为 utf8;需要为utf8mb4设置。
你是怎么设置的?更改为适用的任何一个。
SET NAMES utf8mb4
PDO(... charset=utf8mb4)
mysqli::set_charset('utf8mb4')
- 等等
表情符号是 4 字节的 utf8 代码,因此 四个 个问号。
我正在尝试将一些表情符号字符插入 MySQL 中的 table,但值存储为问号 (????)。
我确保使用正确的 utf8mb4
编码创建数据库:
mysql> describe users;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(191) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
然后我试图确定 MySql 是否理解表情符号,所以我这样做了:
mysql> select '';
+------+
| |
+------+
| |
+------+
1 row in set (0.00 sec)
然后我这样做了:
mysql> insert into users (name) values ('');
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> select * from users;
+----+------------+
| id | name |
+----+------------+
| 21 | فاضل |
| 30 | سلاحف |
| 46 | ???? |
| 47 | ???? |
| 48 | ???? |
| 49 | ???? |
+----+------------+
6 rows in set (0.01 sec)
我不知道该怎么做才能解决这个问题..
** 编辑 ** :根据评论中的要求,我 运行 以下命令:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+-------------------------+
| Variable_name | Value |
+--------------------------+-------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /static/share/charsets/ |
+--------------------------+-------------------------+
8 rows in set (0.00 sec)
您的连接设置为 utf8;需要为utf8mb4设置。
你是怎么设置的?更改为适用的任何一个。
SET NAMES utf8mb4
PDO(... charset=utf8mb4)
mysqli::set_charset('utf8mb4')
- 等等
表情符号是 4 字节的 utf8 代码,因此 四个 个问号。