无法在 mysql 5.6 中插入 utf8mb4 字符

use*_*656 5 mysql character-set mysql-5.6

最近我在我的 mysql 数据库中插入表情符号和其他 4 字节字符时遇到问题然后我发现我的 mysql 版本是 5.1 并且它不支持 utf8mb4 所以我升级到支持 utf8mb4 的 mysql 5.6 并且在我的整理中我可以选择选择 utf8mb4.but 当我尝试通过 phpmyadmin 直接插入表格行时,我也收到了这个错误,也提到了这个链接

       http://dba.stackexchange.com/questions/59126/set-value-of-character-set-client-to-utf8mb4


 1 row affected.
      Warning: #1366 Incorrect string value: '\xF0\x9F\x9A\x8A k...' for column 'rajulp' at row 1
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索,发现这是因为数据库不支持 utf8mb4 字符,然后我在互联网上遵循了一些教程来更新 my.cnf 文件并重新启动 mysql 服务器和服务器。

       https://mathiasbynens.be/notes/mysql-utf8mb4
Run Code Online (Sandbox Code Playgroud)

我尝试了几乎所有可能的组合,但是当我在 sql 中输入它时,它会抛出最大值为 utf8,因为我无法插入 eboji 和几个 4 字节字符。

 Punjab me 1Train k niche 100 Sardar aa gaye..
Run Code Online (Sandbox Code Playgroud)

以下命令在 mysql 中的输出

 SHOW VARIABLES LIKE 'char%'


  character_set_client  utf8
     character_set_connection   utf8
   character_set_database   utf8mb4
    character_set_filesystem    binary
    character_set_results   utf8
   character_set_server utf8mb4
  character_set_system  utf8
     character_sets_dir /usr/share/mysql/charsets/
Run Code Online (Sandbox Code Playgroud)

请指导

Nic*_*ick 5

我在安装 MySQL 5.6.23 时遇到了同样的问题。

我必须编辑 /etc/mysql/my.conf 并将这些条目添加到这些部分:

[客户]
默认字符集=utf8mb4

[mysqld]
字符集服务器 = utf8mb4

[mysql]
默认字符集=utf8mb4

然后以root身份执行:service mysql restart

我的网络服务器连接和我的本地(shell)mysql 连接都使用 utf8mb4。

INSERT INTO some_table_name
(some_index_id,value_to_be_utf8mb4)
值(55,x'F09F9A8A');
select * from some_table_name;
| some_index_id | value_to_be_utf8mb4 |
| 55 | |
1 行(0.00 秒)

以下是来自 mysql 的新命令行实例化:

mysql> 显示变量如 "%coll%";
+----------------------+--------------------+
| 变量名 | 价值 |
+----------------------+--------------------+
| collat​​ion_connection | utf8mb4_general_ci |
| collat​​ion_database | utf8mb4_general_ci |
| collat​​ion_server | utf8mb4_general_ci |
+----------------------+--------------------+
mysql> 显示变量如 "%char%";
+-------------------------+-------------- ------+
| 变量名 | 价值 |
+-------------------------+-------------- ------+
| character_set_client | utf8mb4 |
| 字符集连接| utf8mb4 |
| 字符集数据库| utf8mb4 |
| character_set_filesystem | 二进制 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| 字符集系统| utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+-------------------------+-------------- ------+

最后要注意的是,根据 mysql 5.x 规范,“character_set_system”始终是“utf8”,所以这是正常的。


Rol*_*DBA 2

您仍然将character_set_client设置为utf8

首先确保utf8mb4存在

mysql> select * from information_schema.character_sets where CHARACTER_SET_NAME like 'utf8%';
+--------------------+----------------------+---------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION   | MAXLEN |
+--------------------+----------------------+---------------+--------+
| utf8               | utf8_general_ci      | UTF-8 Unicode |      3 |
| utf8mb4            | utf8mb4_general_ci   | UTF-8 Unicode |      4 |
+--------------------+----------------------+---------------+--------+
2 rows in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

您可能需要执行以下操作之一

建议#1

登录mysql后运行此命令

mysql> set character_set_client = 'utf8mb4';
mysql> show variables like 'character_set_client';
Run Code Online (Sandbox Code Playgroud)

这肯定会确保您的客户会话正在使用utf8mb4

建议#2

使用命令行中的字符集启动mysql客户端

用这个测试一下

mysql -uroot -p --default-character-set=utf8mb4 -ANe"show variables like 'character_set_client'"
Run Code Online (Sandbox Code Playgroud)

它会回显

+----------------------+---------+
| character_set_client | utf8mb4 |
+----------------------+---------+
Run Code Online (Sandbox Code Playgroud)

或者

mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file
Run Code Online (Sandbox Code Playgroud)

如果设置了character_set_client ,则运行

mysql -uroot -p --default-character-set=utf8mb4
Run Code Online (Sandbox Code Playgroud)

试一试 !!!