数据库当前编码格式
- 保存
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\