我目前正在构建一个 Spring MVC webapp,数据库是至关重要的后端部分。然而,无论出于何种原因,Spring 都拒绝将数据处理为 UTF-8。由于视图、资源和浏览器设置为 Unicode,数据库中的表也是如此(并且还阅读了很多类似的问题),我确定问题出在数据库连接上。
JDBC Driver 应该在 connectionProperties 中提供两项:useUnicode(设置为yes和 characterEncoding(设置为utf8)。但事实证明,这是不可能的。
JDBC 是一个 bean,因此通过 XML 文件进行配置,如下所示:
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/<database>" />
<property name="username" value="<not telling>" />
<property name="password" value="<not telling>" />
此设置将从数据库中提取的所有非字母数字字符(例如箭头或希腊字母)转换为问号。这显然是不可接受的。
我尝试了多种解决方案:将 JDBC URL 指定为jdbc:mysql://localhost:3306/<database>?useUnicode=yes&characterEncoding=utf8
,使用my.ini
文件(和 MySQL Workbench)来强制数据库中的所有内容默认为utf8
字符集,以及导致最大头痛的事情:添加<property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />
. 事实证明,在单个 bean 中设置两个 connectionProperties 实际上是不可能的,因为......任何地方都没有提到分隔字符(bean 将尝试将其读取为试图设置yes;characterEncoding=utf8
为 的值useUnicode
)。所以我的问题是:我如何使用utf8?