你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

MySQL修改编码为utf8mb4(支持emoji表情)

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


数据库当前编码格式

  • 保存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.7my.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\  

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。