JDBC MySQL Connector/J 不正确的字符串值:'\xC3\xBCvifone...'

3
我在使用mysql-connector-java-5.0.8将有效的UTF8字符串插入到Percona MySQL数据库中时遇到了问题。我使用的是jdk1.8.0_05,这是一个控制台应用程序。
我有以下字符串:Nüvifone G60
我正在尝试使用PreparedStatementsetString方法将其插入到数据库中。
我的连接字符串如下:jdbc:mysql://host:post/schema?useUnicode=true&characterEncoding=UTF-8 我的my.cnf包含以下代码:
[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqld]
init-connect='SET NAMES utf8'
collation_server=utf8_unicode_ci
character_set_server=utf8

我试图插入数据的表编码被设置为utf8_general_ci

我收到的错误信息是:java.sql.SQLException: 该列的值无法显示:'\xC3\xBCvifo...'

使用System.out.println将字符串输出到控制台时,字符串可以正确显示。

我一整天都在尝试解决这个问题,搜索了数十个网站也没有结果。非常感谢任何帮助。

提前感谢大家。


1
执行 SHOW CREATE TABLE tablename 命令,并确认您要插入字符串的实际列CHARACTER SET。如果我在一个表(和数据库)中定义一个列为 varchar(255) CHARACTER SET ascii,而该表是完全 utf8 的,则可以重新创建您的问题。如有必要,请编辑您的问题并发布 SHOW CREATE TABLE 的结果。 - Gord Thompson
Gord,你找到了问题。由于某种原因,在大约15列的表中,只有这一列设置为ASCII字符集,而所有其他列都正确设置为UTF8。由于某种原因,我错过了它。非常感谢你,你节省了我很多时间!我该如何将你的评论标记为答案? - kazy
2个回答

2

看起来某个特定的列无法接受UTF-8字符。

执行SHOW CREATE TABLE tablename,确认您正在尝试插入字符串的实际列CHARACTER SET。如果我在一个完全是utf8的表格(和数据库)中定义一个列为varchar(255) CHARACTER SET ascii,我可以重现您的问题。


1

PreparedStatement有一个setCharacterStream()方法,它接受一个Reader对象。

现在你可以使用StringReader通过setCharacterStream()将字符串值读入数据库中。

希望能对你有所帮助!


谢谢您的评论,不过问题是不同的(请查看Gord Thompson的评论)。无论如何还是感谢! - kazy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接