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%';
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
(已迁移)
相关推荐
这里我们将深入探讨UTF8和UTF8MB4两种编码格式,以及它们各自的排序规则`utf8mb4_unicode_ci`和`utf8mb4_general_ci`。 首先,UTF-8是一种广泛使用的Unicode字符编码方案,它允许使用1到4个字节来表示不同的字符。...
MySQL数据库的编码转换至utf8mb4是为了更好地支持Unicode字符集,尤其是对于包含四字节表情符号和其他特殊字符的数据。utf8mb4是utf8的扩展,它不仅完全兼容utf8,还能处理更多的Unicode字符范围,包括现代社交媒体...
- **更改字段字符集**:如果已有表中的某个字段需要存储emoji表情,可以通过ALTER TABLE命令修改字段的字符集为`utf8mb4`。例如: ```sql ALTER TABLE `article` MODIFY COLUMN `content` MEDIUMTEXT CHARACTER ...
MySQL 数据库编码修改为 utf8mb4 在 MySQL 数据库中,默认的编码方式为 utf8,但是 utf8 编码只支持最多 3 字节的数据,而 emoji 表情字符是 4 字节的字符。如果直接往采用 utf-8 编码的数据库中插入表情数据,Java...
可以通过修改 MySQL 配置文件 my.cnf,将 default-character-set 设置为 utf8mb4,以便将数据库字符集改为 utf8mb4。然后,重启数据库,检查变量,确保系统变量是 utf8mb4。最后,将已经建好的数据库、表和列转换成 ...
从`utf8`切换到`utf8mb4`是为了应对Unicode编码的扩展,因为`utf8`仅支持基本多语言平面(BMP)内的字符,而`utf8mb4`则能支持全部的Unicode字符,包括4字节的UTF-8编码。 在MySQL 5.5及更高版本中,`utf8mb4`被...
详解JDBC对Mysql utf8mb4字符集的处理 ...使用JDBC连接Mysql数据库时,需要指定字符编码为utf8mb4,否则将无法存储emoji表情。此外,需要在Mysql配置文件my.cnf中指定字符集为utf8mb4,以支持存储emoji表情。
在MySQL中,可以使用以下命令创建一个名为`my_db`的数据库,并设置其默认字符集为UTF-8和排序规则`utf8_general_ci`: ```sql CREATE DATABASE IF NOT EXISTS my_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;...
我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来 我们可以通过命令查看数据库当前...
MySQL存储Emoji表情报错的处理方法是通过将MySQL数据库的编码更改为utf8mb4来实现的。Emoji表情是使用Unicode编码的字符,通常占用4个字节。而MySQL中的utf8编码只支持最多3个字节的字符,因此当尝试存储4字节的...
在创建数据库和表时,需明确指定`CHARACTER SET utf8mb4`以支持完整的Unicode范围,包括四字节的字符。 总结,UTF-8字符编码在Windows、文本工具、Java和数据库中的应用需要全面理解和掌握,因为这些地方都可能遇到...
6. **检查字符集设置**:登录MySQL并执行如下命令验证字符集是否已成功更改为UTF-8mb4: ``` SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; ``` 正确的输出...
本篇文章将详细指导如何将 MySQL 5.5 的默认编码更改为 UTF-8,以支持多语言环境。 首先,你需要确认 MySQL 数据库当前的编码设置。在安装并启动 MySQL 服务后,通过登录 MySQL 客户端并运行 `SHOW VARIABLES LIKE ...
4. **更新已有数据**:如果表中已经有数据,可能需要先清空数据,然后使用`ALTER TABLE`命令转换,或者在插入数据前先将数据转换为`utf8mb4`编码。 5. **应用程序代码调整**:确保你的应用程序连接到数据库时也指定...
- **客户端设置**:确保你的MySQL客户端工具(如MySQL Workbench)的字符集设置为`utf8mb4`。在连接字符串中可以添加`useUnicode=yes&characterEncoding=utf8mb4`。 - **数据导入导出**:在导入或导出数据时,使用...
- 登录MySQL数据库,确保目标数据库和数据表的字符集均为`utf8`或`utf8mb4`,并且排序规则为`utf8_general_ci`。可以通过执行以下SQL语句来查看和修改表的字符集: ```sql -- 查看表的字符集 SHOW CREATE TABLE ...