【问题标题】:Spring 3 MVC + MySQL: cannot store € characterSpring 3 MVC + MySQL:无法存储€字符
【发布时间】:2024-05-04 16:00:02
【问题描述】:

我使用 Hibernate 和 MySQL 5 设置了 Spring 3 MVC。在 Web 表单中,我在字段中输入了一个字符,€(即只有一个字符)。然后,当我尝试保存数据时,出现以下异常:

java.sql.BatchUpdateException: Data truncation: Data truncated for column 'name' at row 1

'name' 是我的模型对象上的字符串。 'name' 列是 MySQL 中的数据类型 VARCHAR(80)。我也尝试在 TEXT 列中输入 €,结果相同。

我为我的 webapp 配置了 CharacterEncodingFilter,我的数据库连接字符串如下所示:

jdbc:mysql://localhost/baseApp?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8

任何想法可能是什么问题?

更新:

我不认为 MySQL 与这个问题有任何关系。在设置模型对象的属性之前,我已经截获了 HTTP POST,并且 € 被正确编码为 %80。但是,当我询问模型对象的属性时,€ 只是 ?。

有什么想法吗?

【问题讨论】:

  • 您能否展示一些来自 webapp 的示例代码,以便我们缩小可能性?谢谢!

标签: java mysql hibernate spring-mvc


【解决方案1】:

您确定 MySQL 数据库支持 UTF-8 吗?我认为默认安装设置使用 latin1。您还需要确保 my.ini 配置文件中 [mysql] 和 [mysqld] 的“默认字符集”设置为“utf8”。此外,请确保该表是使用 UTF-8 设置构建的。

【讨论】:

  • 如果我通过 MySQL 查询浏览器将 € 符号直接输入到数据库中,那么它将通过我的 webapp 正确显示,所以我怀疑这不是问题.. 只有当我通过输入 € 时才会出现我的网络应用
  • 确保您的 JSP 正在发送 UTF-8。 中的