【问题标题】:Character encoding: java.sql.SQLException: Incorrect string value: '\xF5fi S\xE1...' for column字符编码:java.sql.SQLException:不正确的字符串值:'\xF5fi S\xE1...' 列
【发布时间】:2013-12-05 10:08:10
【问题描述】:

我正在将 spring-mvc jpa 应用程序写入旧数据库。数据库表的字符集是 iso-8859-2 (latin2)。由于遗留原因,这无法更改。

数据库是mysql 5.5。 jpa 实现是hibernate 4。

数据库中的字段可以包含重音字符,例如“áéíöőüű”等。 当我尝试合并对象、更新数据库时,我得到一个

SQLException: Incorrect string value : '\xF5fi S\xE1...' for column"

对于值“Petőfi Sándor”。

视图是jsp-s,我设置编码为ISO-8859-2:

<meta charset="ISO-8859-2">

并且字符显示正确,(例如在输入字段中使用html特殊字符编写

 &Aacute; instead of Á

但它们的显示效果很好。

我在这里查看过类似的问题,但没有找到解决方案。如果有人知道解决方案,我将不胜感激。我现在处于困境中。

编辑: 表定义中的相关部分:

CREATE TABLE `cimek` (
...
`name` varchar(30) COLLATE latin2_hungarian_ci NOT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=4040
 DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci

只有重音字符 ő 和 ű 会造成麻烦。

【问题讨论】:

  • 你能发布表和列的定义吗?数据库应该接受\xF5
  • 整个表格定义太长了,不过我会添加相关部分作为编辑。

标签: java mysql spring-mvc character-encoding


【解决方案1】:

尝试添加

characterEncoding=ISO-8859-2

在你的 jdbc 驱动初始化中

jdbc:mysql://location/dbname?characterEncoding=ISO-8859-2

【讨论】:

  • 我已经更改了我的 persistence.xml 文件中的连接字符串:name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/database_name?zeroDateTimeBehavior= convertToNull;characterEncoding=ISO-8859-2" 但是我得到了同样的错误信息
猜你喜欢
  • 2011-03-23
  • 2013-02-10
  • 2015-06-01
  • 1970-01-01
  • 2015-03-10
  • 2012-11-19
  • 2012-02-26
  • 2011-10-05
  • 2020-06-13
相关资源
最近更新 更多