数据库当前编码格式
- 保存
emoji
表情时报错如下:Incorrect string value: ‘\xF0\x9F\x98\x81’ for column ‘name’ at row 1
-
使用
SHOW VARIABLES LIKE '%char%';
命令查看数据库编码及说明如下:Variable_name Value 说明 character_set_client utf8 客户端使用的编码格式 character_set_connection utf8 连接数据库的编码格式 character_set_database utf8 创建数据库的默认编码格式 character_set_filesystem binary 文件系统编码格式 character_set_results utf8 数据库给客户端返回数据时的编码格式 character_set_server utf8 服务器安装时的默认编码格式 character_set_system utf8 数据库系统使用的编码格式
(不需要修改)character_sets_dir C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ 字符集的安装目录 - 使用命令
SHOW CREATE TABLE 表名;
查看表的编码。 - 使用命令
SHOW FULL COLUMNS FROM 表名;
查看表中字段的编码。 - 发现数据库、表、字段的编码都为
utf8
,而保存emoji
表情需要将编码改为utf8mb4
。
修改数据库编码格式
-
1.修改表的编码格式:
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8mb4;
-
2.修改表中字段的编码格式:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4;
-
3.修改数据库的编码格式(有问题,只是临时修改,数据库重启后又恢复utf8):
SET character_set_client = utf8mb4; SET character_set_connection = utf8mb4; SET character_set_database = utf8mb4 SET character_set_results = utf8mb4;
- 经过以上三步的修改,此时将
emoji
表情复制到表中已经能成功保存。 - 但是重新启动或重新连接
mysql
后,数据库的编码又变成了utf8
,是因为SET character_set_client = utf8mb4;
修改的是当前连接的设置,是临时性的。
永久修改数据库编码格式:
- 永久修改数据库编码需要修改数据库的配置文件
my.ini
。 - 使用
SELECT @@basedir AS basePath FROM DUAL;
查看mysql
安装路径;在安装路径下找到my.ini
文件并打开(我使用的MySQL5.7
,my.ini
文件在C:\ProgramData\MySQL\MySQL Server 5.7
下)。 my.ini
修改如下:-
1.修改
default-character-set
编码:省略... [mysql] default-character-set=utf8mb4 省略...
-
2.在
[mysqld]
标签下添加如下三行代码:省略... [mysqld] character-set-client-handshake = false character-set-server = utf8mb4; init_connect='SET NAMES utf8mb4' 省略...
-
-
以上对数据库编码的修改就完成了,重启数据库,使用
SHOW VARIABLES LIKE '%char%';
查看修改后的编码如下(character_set_system
是数据库系统的编码不需要修改):Variable_name Value 说明 character_set_client utf8mb4 character_set_connection utf8mb4 character_set_database utf8mb4 character_set_filesystem binary character_set_results utf8mb4 character_set_server utf8mb4 character_set_system utf8 character_sets_dir C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\