`

MySQL编码格式更改为utf8mb4

阅读更多

       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)

       可以对4字节的字符进行编码存储,然后取出来的时候,再进行解码。但是这样做会使得任何使用该字符的地方都要进行编码与解码。

 

       utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。
       采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

 

更改数据库编码为utf8mb4

1. MySQL的版本

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

2. MySQL驱动

      5.1.34可用,最低不能低于5.1.13

3.修改MySQL配置文件

 

修改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'        可以不配置

4. 重启数据库,检查变量

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

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
collation_connection utf8mb4_unicode_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci

collation_connection 、collation_database 、collation_server是什么没关系。

但必须保证

系统变量 描述
character_set_client (客户端来源数据使用的字符集)
character_set_connection (连接层字符集)
character_set_database (当前选中数据库的默认字符集)
character_set_results (查询结果字符集)
character_set_server (默认的内部操作字符集)

这几个变量必须是utf8mb4。

5. 数据库连接的配置

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

6. 将数据库和已经建好的表也转换成utf8mb4

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

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

 

参照:https://www.cnblogs.com/shihaiming/p/5855616.html

参照:http://blog.csdn.net/woslx/article/details/49685111

 

 

 

 

分享到:
评论

相关推荐

    如何更改MySQL数据库的编码为utf8mb4

    utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 这篇文章给大家介绍了更改MySQL数据库的编码为utf8mb4的相关知识,感兴趣的朋友一起看看吧

    更改MySQL数据库的编码为utf8mb4_wo.pdf

    更改MySQL数据库的编码为utf8mb4_wo

    设置mysql5.7编码集为utf8mb4的方法

    移动端的表情或者一些emoji是4字节的,但是utf-8是3字节的,这篇文章主要介绍了设置mysql5.7编码集为utf8mb4的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    MySQL字符集utf8修改为utf8mb4的方法步骤

    对于mysql 5.5 而言,如果不设定字符集,mysql默认的字符集是 latin1 拉丁文字符集; 但随着各种业务的进一步发展,除了各个国家的本身...所以现在一些新的业务,比如ISO等,会将MySQL数据库的字符集设置为utf8mb4。

    MySql修改数据库编码为UTF8避免造成乱码问题

    我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来 我们可以通过命令查看数据库当前...

    mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    主要介绍了mysql存储emoji表情报错的处理方法,较为详细的分析了通过更改mysql编码为utf8mb4解决存储emoji表情报错的相关操作技巧,需要的朋友可以参考下

    Mysql数据库编码问题 (修改数据库,表,字段编码为utf8)

    因为utf8字符集是目前最适合于实现多种... #注意后面这句话 “COLLATE utf8_general_ci”,大致意思是在排序时根据utf8校验集来排序 #那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了 mysql>create table

    SSH+MYSQL 开发java web 企业级新闻系统

    使用MySQL,字符集选择为`utf8`或者`utf8mb4`(支持更多特殊字符,推荐)。 2. 创建数据库导入数据。数据库在`News\`目录下,参考数据脚本创建数据库。 3. 设置项目编码为utf-8,选择jdk1.7版本或以上,不要选择jre...

    SSH+MYSQL 开发java web学生成绩管理系统

    使用MySQL,字符集选择为`utf8`或者`utf8mb4`(支持更多特殊字符,推荐)。 2. 创建数据库导入数据。数据库在`SSH\`目录下,参考数据脚本创建数据库。 3. 设置项目编码为utf-8,选择jdk1.7版本或以上,不要选择jre。...

    mysql存储emoji表情步骤详解

    Caused by: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x94\xA5’ for column Emoji...Mysql设置字符编码集为utf8mb4,对应的库、表、字段设置为utf8mb4,注意如果是已经存在的表utf8编码集修改为utf8

    jieqi24:jieqi2.4_utf8杰奇2.4,UTF8版本Jieqi2.4解密开源程序来源:https

    2,更改网站编码编码为uft8,采集GBK自动转为utf8,创建数据库编码为utf8mb4,把sql目录下的jieqi2.4.sql导入数据库,作为网站的初始数据库结构和数据,更改为存储为INNODB 3,上传网站程序后,以下4个目录必须可...

    使MySQL能够存储emoji表情字符的设置教程

    MySQL 需要支持 emoji 表情符号版本需要大于5.5.3,且字符集需要设置为utf8mb4 字符集。 utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以...

    基于PHP的简单图片分享系统源码(课程作业).zip

    PHP版本必须大于等与5.4 Mysql必须支持INNODB引擎,数据库默认编码请指定为utf8mb4,集合为utf8mb4_unicode_ci,创建语句如下 CREATE DATABASE `database_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE ...

    解决添加emoji表情报错的方案.txt

    解决页面添加微信emoji表情保存入库,修改mysql数据库的utf-8编码为utf8mb4编码,采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

    Mysql 批量修改字符集

    MySQL 批量修改SCHEMA下所有数据表的编码及字符集

    微信昵称带符号导致插入MySQL数据库时出错的解决方案

    Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节。 因此会导致带有表情的昵称...ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; 以上所述是小编给大家介绍的微信昵称带

    MySQL字符编码设置

     修改mysql的编码方式可以有以下几个:  1.通过配置文件修改my.ini(windows下)或/etc/my.cnf(linux下)  分别添加如下内容  [mysqld]  character_server_set=utf8  [mysql]  default-character-set=utf...

Global site tag (gtag.js) - Google Analytics