1

我正在尝试将一些表情符号字符插入 MySQL 中的表中,但值存储为问号 (????)。

我确保使用正确的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)
4

1 回答 1

1

您的连接设置为 utf8;它需要为 utf8mb4 设置。

你是怎么设置的?更改为其中适用的任何一个。

  • SET NAMES utf8mb4
  • PDO(... charset=utf8mb4)
  • mysqli::set_charset('utf8mb4')
  • ETC

表情符号是 4 字节的 utf8 代码,因此有四个问号。

于 2015-07-07T07:11:11.807 回答