首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC和utf8mb4编码表情符号

JDBC和utf8mb4编码表情符号
EN

Stack Overflow用户
提问于 2017-11-02 01:49:18
回答 3查看 4.5K关注 0票数 8

我使用MySQL5.7.18,当我从JDBC更新时,我遇到了一个表情符号的问题。

表创建:body类型为utf8localizations类型为utf8mb4

代码语言:javascript
复制
CREATE TABLE `my_table` (
  `body` TEXT NOT NULL,
  `localizations` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8;

现在我使用SequelPro插入数据。为了正确执行此操作,我按下了Database -> View using encoding -> utf8mb4。插入代码:

代码语言:javascript
复制
INSERT INTO my_table(body, localizations) VALUES ('test', '');

然后我尝试从jdbc加载它。这里是目前工程中使用的连接字符串部分(这里使用格式化只是为了方便阅读):

代码语言:javascript
复制
?useEncoding=true
&characterEncoding=UTF-8

它成功地从数据库加载localizations。但是从JDBC更新表返回错误:

代码语言:javascript
复制
SQLException: Incorrect string value: '\xF0\x9F\x94\xA5"}...' for column 'localizations'

我想这是因为连接编码的原因。SequelPro有一个Show server variables选项,下面是utf8utf8mb4之间的区别

代码语言:javascript
复制
character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_results = utf8mb4
collation_connection = utf8mb4_general_ci

所以我尝试修改连接字符串:

代码语言:javascript
复制
?useEncoding=true
&characterEncoding=UTF-8
&sessionVariables=
  character_set_client=utf8mb4,
  character_set_connection=utf8mb4,
  character_set_results=utf8mb4,
  collation_connection=utf8mb4_general_ci

仍然是同样的问题。有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2017-11-07 22:52:02

错误消息说(我想) JDBC没有被告知utf8mb4...

我怀疑useEncoding是个打字错误:

代码语言:javascript
复制
?useUnicode=yes&characterEncoding=UTF-8  -- in the getConnection() call. 

http://mysql.rjweb.org/doc.php/charcoll#best_practice

票数 1
EN

Stack Overflow用户

发布于 2019-03-06 18:13:32

我也面临着同样的问题。我在会话变量中发现

character_set_client=utf8mb4

character_set_server=utf8

如下面的链接所示,

https://dev.mysql.com/doc/refman/5.7/en/charset-server.html

https://docs.oracle.com/cd/E17952_01/connector-j-en/connector-j-reference-charsets.html

我从JDBC config中删除了characterEncoding、charSet和useEncoding属性,并使用以下命令重新启动了mysql服务器:

--character-set-server=utf8mb4

像护身符一样工作!

票数 1
EN

Stack Overflow用户

发布于 2021-11-21 09:39:13

如果您使用的是旧版本的mysql-connector-java,请考虑升级到新版本。将mysql-connector-java从5.1.31升级到5.1.49解决了我的问题。我的JDBC_URL是"jdbc:mysql://{HOST}:{PORT}/{DBNAME}?useUnicode=true&characterEncoding=utf-8";

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47060827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档