更改MySQL数据库的编码为utf8mb4

原创 创建时间:2018-09-09 访问量:123 赞:0 踩:0

本文主要讲MySQL如何修改字符集编码,并将编码设置为utf8mb4。


为什么要设成utf8mb4,是因为utf8mb4兼容utf8,且是utf8的超集。utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常:  


java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。 


Mysql Jdbc连接驱动最低不能低于5.1.13。


修改mysql配置文件my.cnf(windows为my.ini) 
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: 

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'


重启数据库:

Ubuntu18:service mysql restart

或者有的Unix系统:service mysqld restart

windows在我的电脑管理->服务中找到mysql,右键重启服务


进入mysql并检查字符编码是否修改成功:

>>mysql -uroot -p
Enter password:**********
mysql>>
mysql>>SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

查看数据库相产字符编码是否正确!


数据库JDBC连接参数中: 
characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。 
而autoReconnect=true是必须加上的。  


如果在修改之前数据库已经创建表了,最好再修改表的编码:

更改数据库编码:ALTER DATABASE caitu99 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATEutf8mb4_general_ci
如有必要,还可以更改列的编码。

评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com(仅限本站无法查询到的资料);本站能够查询到的资料请关注“工联信息网”公众号,通过页面提供的资源码查询!
不良信息反馈及侵权投诉建议请致邮箱:accusation@glxxw2018.com