【问题标题】:JDBC MySQL Connector/J Incorrect string value: '\xC3\xBCvifone...'JDBC MySQL 连接器/J 不正确的字符串值:'\xC3\xBCvifone...'
【发布时间】:2014-05-23 15:29:28
【问题描述】:

我在使用mysql-connector-java-5.0.8 将有效的 UTF8 字符串插入 Percona MySQL 数据库时遇到问题。我使用jdk1.8.0_05。此应用程序是一个控制台应用程序。

我有以下字符串:Nüvifone G60

我正在尝试使用PreparedStatement 将其插入数据库,使用setString 方法。

我的连接字符串如下: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: Incorrect string value: '\xC3\xBCvifo...' for column...

使用System.out.println 将字符串显示到控制台会正确显示字符串。

我玩了一整天,用谷歌搜索了几十个网站都没有结果。任何帮助将不胜感激。

提前感谢大家。

【问题讨论】:

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

标签: java mysql jdbc unicode utf-8


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    希望有帮助!

    【讨论】:

    • 感谢您的评论,但问题有所不同(查看 Gord Thompson 评论)。还是谢谢!
    猜你喜欢
    • 2021-08-18
    • 2011-09-13
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多