原文: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. oracle 函数参数类型,ORACLE 11g中的表值函数? (参数化视图)
  2. 计算机组成原理 — PCIe 总线
  3. Android之线程池深度剖析
  4. 华中科技大学计算机卓越计划,计算机卓越计划实验班培养计划.doc
  5. Redis与MySQL双写一致性如何保证
  6. Android开源库集锦
  7. ssm框架requestmapping找不到_从MVC原理开始手敲一个MVC框架,带你体会当大神的乐趣...
  8. python输出返回值给文件_python-输入输出及文件
  9. 社工库源码mysql_社工库源码
  10. mescroll.js -- 精致的下拉刷新和上拉加载js框架
  11. Unity中世界坐标与相对于某个物体的相对坐标的转换
  12. npm 清理缓存命令 【最新的】
  13. 软件性能测试pdf,软件性能测试报告模板.pdf
  14. 【RFID】天线技术
  15. 【英语四六级-必背单词】高中英语单词 (E)-MP3试听与下载
  16. Mac虚拟机VMware Fusion如何强制关机虚拟系统
  17. DDK 2003 SP1 官方下载地址
  18. 完美兼容IE_Opera_Firefox等主流浏览器的锁定表格的 表头以及表头列
  19. Java使用GZIP进行压缩和解压缩(GZIPOutputStream,GZIPInputStream)
  20. 基于ESP8266-12f 最小系统接线说明

热门文章

  1. MTK平台s5k3l6 PDAF线性度测试fail排查方法
  2. python删除文件指定行
  3. 应大数据时代而写了个磁力搜索的网页- WWW.MOVIH.COM 磁力
  4. linux环境下MongoDB安装过程详解
  5. 发表一篇计算机应用研究期刊论文要多久
  6. P3868 [TJOI2009]猜数字
  7. 常用的字符串截取方法
  8. Caffeine示例
  9. AD PCB常用系统快捷键及自定义快捷键
  10. 老板十本必读财经图书