原文:http://blog.csdn.net/woslx/article/details/49685111

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;

如有必要,还可以更改列的编码

mysql utf8mb4 配置_MySQL数据库UTF8mb4设置相关推荐

  1. ubuntu mysql主从配置_MYSQL 主从数据库的配置 ubuntu 12.04

    环境: 主服务器:centos 5.2 mysql 5.1.35  IP:192.168.1.22 从服务器:centos 5.2 mysql 5.1.35  IP:192.168.1.33 配置: ...

  2. mysql数据库的远程访问_mysql数据库远程访问设置方法

    mysql数据库远程访问设置方法 myeclipse连接mysql数据库错误示例: null, message from server: "Host '127.0.0.1' is not a ...

  3. mysql timestamp 默认_MySQL数据库TIMESTAMP怎么设置默认值 | 学步园

    MySQL数据库TIMESTAMP设置默认值新手技术人员对他感到很陌生,不知道该怎么设置.下面学步园小编来讲解下MySQL数据库TIMESTAMP怎么设置默认值? MySQL数据库TIMESTAMP怎 ...

  4. mysql 关联查询_mysql数据库调优(二)

    第五.查询优化 1.查询慢的原因:网络因素.CPU.IO.上下文切换.系统调用.生成统计信息.锁等待时间等 2.优化数据库访问:查询性能地下的原因是访问的数据太多,某些查询不可避免的需要筛选大量的数据 ...

  5. mysql case默认_MySQL数据库架构和同步复制流程

    在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的. 首先我们来说说数据库的架构. 1.mysql主从架构,如图: 这种架构 ...

  6. mysql 乱码 越南_mysql数据库乱码之保存越南文乱码解决方法

    我自己测试一下,很多字符变成了 '?'. 数据库连接已经是使用了 utf8 字符集: 复制代码 代码如下:define("MYSQL_ENCODE", "UTF8&quo ...

  7. mysql 苏勇_MySQL数据库基础学习笔记(整理自苏勇老师的MySQL基础课程视频)

    一.mysql安装及基本配置 1.安装 Mysql官网:www.mysql.com 开源版本(MySQL Community Server) --安装系统自带版本(如果需要更高版本可到官网下载) # ...

  8. MySQL主从配置 主从数据库不同步的原因

    MySQL主从配置中,主从数据库不同步的原因可能有以下几种: 主库的binlog格式或版本与从库不匹配. 主库和从库之间网络问题导致数据传输中断. 主库和从库之间的时间不同步. 主从复制用户权限设置不 ...

  9. mysql双机配置_mysql 双机热备配置详解

    花了大半天的时间研究mysql 5.0.* ,参考了很多文档,总算将mysql的双机热备给搞定了.心情很好,写个文章纪念一下.因为以后还可能实际用到,所以也作以下笔记. 使用两台虚拟机,nod1和no ...

最新文章

  1. opencv 二值化 python_Python OpenCV 图像二值化-阈值分割
  2. slice,substring,substr的区别
  3. TOJ-1036.Rails STL-栈
  4. 【深度学习】LeNet-5、AlexNet、VGG16、GoogLeNet、ResNet
  5. SpringMVC容器和Spring容器
  6. 文件系统管理相关命令
  7. 父类可以调用子类的方法吗_python类的继承、多继承及查找方法顺序
  8. Flutter安装和踩坑指南(windows)
  9. android中将日志文件输出到sd卡
  10. Pandas period_range
  11. JavaScript操作BOM对象 - document对象; history 和 location对象 ,对话框,Date时间对象...
  12. 【OpenCV学习笔记】【编程实例】四(获取一个或多个感兴趣区域)
  13. TCP 粘包/拆包说明 及 异常案例
  14. Audio播放流程(一)---MediaPlayer流程
  15. Atitit eclipse新特性总结3.1---4.4  4.5
  16. 常用中文字体的Unicode编码
  17. Kaptcha 验证码框架使用
  18. 手游开发者的渠道之困
  19. w10系统服务器如何创建新用户,关于Win10怎么给本地账户添加管理员权限的讲解...
  20. 喜马拉雅如何正序播放

热门文章

  1. flask vue 文件流的方式下载word
  2. ACS712 输出滤波
  3. 新手入门蓝牙耳机哪款好用?300内低延迟平价蓝牙耳机推荐
  4. DirectX11 演示程序框架
  5. 深入理解CAS 乐观锁 | Java
  6. 计算机显示器桌面变小,电脑屏幕变小了左右黑【处理方案】
  7. 隐马尔可夫模型(三)预测问题
  8. 使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
  9. java nio 李林峰_Netty堆外内存泄漏排查,这一篇全讲清楚了
  10. PAT--L1-046. 整除光棍