`

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 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci

    这里我们将深入探讨UTF8和UTF8MB4两种编码格式,以及它们各自的排序规则`utf8mb4_unicode_ci`和`utf8mb4_general_ci`。 首先,UTF-8是一种广泛使用的Unicode字符编码方案,它允许使用1到4个字节来表示不同的字符。...

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

    MySQL数据库的编码转换至utf8mb4是为了更好地支持Unicode字符集,尤其是对于包含四字节表情符号和其他特殊字符的数据。utf8mb4是utf8的扩展,它不仅完全兼容utf8,还能处理更多的Unicode字符范围,包括现代社交媒体...

    emoji入库mysql注意事项除了更改utf8mb4最大的坑在这里

    - **更改字段字符集**:如果已有表中的某个字段需要存储emoji表情,可以通过ALTER TABLE命令修改字段的字符集为`utf8mb4`。例如: ```sql ALTER TABLE `article` MODIFY COLUMN `content` MEDIUMTEXT CHARACTER ...

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

    MySQL 数据库编码修改为 utf8mb4 在 MySQL 数据库中,默认的编码方式为 utf8,但是 utf8 编码只支持最多 3 字节的数据,而 emoji 表情字符是 4 字节的字符。如果直接往采用 utf-8 编码的数据库中插入表情数据,Java...

    Spring Data Jpa Mysql使用utf8mb4编码的示例代码

    可以通过修改 MySQL 配置文件 my.cnf,将 default-character-set 设置为 utf8mb4,以便将数据库字符集改为 utf8mb4。然后,重启数据库,检查变量,确保系统变量是 utf8mb4。最后,将已经建好的数据库、表和列转换成 ...

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

    从`utf8`切换到`utf8mb4`是为了应对Unicode编码的扩展,因为`utf8`仅支持基本多语言平面(BMP)内的字符,而`utf8mb4`则能支持全部的Unicode字符,包括4字节的UTF-8编码。 在MySQL 5.5及更高版本中,`utf8mb4`被...

    详解JDBC对Mysql utf8mb4字符集的处理

    详解JDBC对Mysql utf8mb4字符集的处理 ...使用JDBC连接Mysql数据库时,需要指定字符编码为utf8mb4,否则将无法存储emoji表情。此外,需要在Mysql配置文件my.cnf中指定字符集为utf8mb4,以支持存储emoji表情。

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

    在MySQL中,可以使用以下命令创建一个名为`my_db`的数据库,并设置其默认字符集为UTF-8和排序规则`utf8_general_ci`: ```sql CREATE DATABASE IF NOT EXISTS my_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;...

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

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

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

    MySQL存储Emoji表情报错的处理方法是通过将MySQL数据库的编码更改为utf8mb4来实现的。Emoji表情是使用Unicode编码的字符,通常占用4个字节。而MySQL中的utf8编码只支持最多3个字节的字符,因此当尝试存储4字节的...

    深入UTF8字符编码.doc

    在创建数据库和表时,需明确指定`CHARACTER SET utf8mb4`以支持完整的Unicode范围,包括四字节的字符。 总结,UTF-8字符编码在Windows、文本工具、Java和数据库中的应用需要全面理解和掌握,因为这些地方都可能遇到...

    MySQL保存emoji表情

    6. **检查字符集设置**:登录MySQL并执行如下命令验证字符集是否已成功更改为UTF-8mb4: ``` SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; ``` 正确的输出...

    修改mysql5.5默认编码(图文步骤修改为utf-8编码)

    本篇文章将详细指导如何将 MySQL 5.5 的默认编码更改为 UTF-8,以支持多语言环境。 首先,你需要确认 MySQL 数据库当前的编码设置。在安装并启动 MySQL 服务后,通过登录 MySQL 客户端并运行 `SHOW VARIABLES LIKE ...

    mysql保存微信昵称特殊字符的方法

    4. **更新已有数据**:如果表中已经有数据,可能需要先清空数据,然后使用`ALTER TABLE`命令转换,或者在插入数据前先将数据转换为`utf8mb4`编码。 5. **应用程序代码调整**:确保你的应用程序连接到数据库时也指定...

    MySql乱码问题解决方法

    - **客户端设置**:确保你的MySQL客户端工具(如MySQL Workbench)的字符集设置为`utf8mb4`。在连接字符串中可以添加`useUnicode=yes&characterEncoding=utf8mb4`。 - **数据导入导出**:在导入或导出数据时,使用...

    在DELPHI中使用MyDAC连接MySQL数据库时中文显示乱码的解决方法

    - 登录MySQL数据库,确保目标数据库和数据表的字符集均为`utf8`或`utf8mb4`,并且排序规则为`utf8_general_ci`。可以通过执行以下SQL语句来查看和修改表的字符集: ```sql -- 查看表的字符集 SHOW CREATE TABLE ...

Global site tag (gtag.js) - Google Analytics