mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题
来源:互联网 发布:女生风油精滴下体 知乎 编辑:程序博客网 时间:2024/05/29 19:10
mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题
mysql中保存4字节长度的UTF-8字符(例如emoji表情),就需要使用 utf8mb4 字符集。
如果要写入emoji表情(utf8mb4)到mysql,需要应用客户端、客户端到MySQL的连接、以及MySQL实例内部这三者统一,统一使用支持utf8mb4字符集才行。
否则,mysql的jdbc链接驱动mysql-connetoer会抛异常:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84],...' for column 'name' at row 1
mysql server 5.5.3+ 版本才支持utf8mb4。
mysql> select version();
mysql-connector-5.1.13+版本才支持utf8mb4。
mysq配置文件修改,mysql修改字符集:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
#collation-server = utf8mb4_unicode_ci #测试发现可能不用配置#init_connect=’SET NAMES utf8mb4’ #测试发现可能不用配置
sql_mode='NO_ENGINE_SUBSTITUTION'
重启mysql
mysql> show variables like '%charact%';
+--------------------------+----------------------------+| 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 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
必须保证下面几个正确:
character_set_client (客户端来源数据使用的字符集)
character_set_connection (连接层字符集)
character_set_database (当前选中数据库的默认字符集)
character_set_results (查询结果字符集)
character_set_server (默认的内部操作字符集)
客户端链接测试:
#1: 插入后为乱码:3F3F3F3F
set charset utf8;
insert into test_utf8mb4_src values(9,"test", '??'); #??为直接拷贝的表情符号
select hex(url) from test_utf8mb4_src where id=9;
#2: 插入OK, F09F9884
set charset utf8;
insert into test_utf8mb4_src values(9,"test", 0xF09F9884);
select hex(url) from test_utf8mb4_src where id=9;
#3: 插入OK, F09F9884
set charset utf8;
insert into test_utf8mb4_src values(9,"test", UNHEX('F09F9884'));
select hex(url) from test_utf8mb4_src where id=9;
#4: 插入OK, F09F9884
set charset utf8mb4;
insert into test_utf8mb4_src values(9,"test", '??'); #??为直接拷贝的表情符号
select hex(url) from test_utf8mb4_src where id=9;
#5: 插入OK, F09F9884
set charset utf8mb4;
insert into test_utf8mb4_src values(9,"test", 0xF09F9884);
select hex(url) from test_utf8mb4_src where id=9;
#6: 插入OK, F09F9884
set charset utf8mb4;
insert into test_utf8mb4_src values(9,"test", UNHEX('F09F9884'));
select hex(url) from test_utf8mb4_src where id=9;
----------
总结一下:
不同的配置,有不同测试结果。
1.mysql配置如下,写成功&查询hex值正确
#vim /etc/my.conf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4 #会修改@@character_set_server & @@character_set_database,该参数如果不配置成utf8mb4则无法存储
mysql> show variables like '%char%';
+--------------------------------------+----------------------------+
| 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 |
...
+--------------------------------------+----------------------------+
2.写入会失败
#vim /etc/my.conf
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
character-set-server = utf8 #会修改@@character_set_server & @@character_set_database,该参数如果不配置成utf8mb4则无法存储
mysql> show variables like '%char%';
+--------------------------------------+----------------------------+
| Variable_name | Value |
+--------------------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
...
+--------------------------------------+----------------------------+
3.其他的配置,可能会导致写入虽然成功,但写入的值(查看hex)不正确。例如:
default-character-set = utf8mb4
character-set-server=utf8
- mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- mysql/Java服务端对emoji的支持
- MySQL/Java服务端对emoji的支持
- 171108 逆向-SWPU(re200)
- 码农晋升修炼指南,这些方法你要知道
- RecyclerView的极尽升华:BaseRecyclerViewFragment
- IE与非IE浏览器调用PC摄像头拍摄并且上传
- Windows驱动开发之入门篇(一)
- mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题
- 百度地图api 常用demo
- python configParser模块详解(转载)
- Java线程面试题 Top 50 (转载)
- 窗体程序计算一元二次方程
- 主线程中的Looper.loop()一直无限循环为什么不会造成ANR?
- 使用百度地图JavaScript API构建离线地图应用(完整教程)
- Excel 统计符合条件不重复的个数
- Xenial中安装sougou拼音遇到不兼容问题