如何在Spring管理的MySQL JDBC连接上设置useUnicode=true和charactenCoding=utf8属性

2022-09-01 16:41:34

我目前正在构建一个Spring MVC webapp,数据库是重要的后端部分。然而,无论出于何种原因,Spring都拒绝将数据处理为UTF-8。由于视图,资源和浏览器都设置为Unicode,数据库中的表也是如此(并且还阅读了相当多的类似问题),因此我已经确定问题出在数据库连接上。

JDBC 驱动程序应在 connection 属性中提供两个项目: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指定为,使用文件(和MySQL工作台)播放,以强制数据库中的所有内容默认为字符集,以及引起最大麻烦的事情:添加。事实证明,在单个bean中设置两个连接属性几乎是不可能的,因为......在任何地方都没有提到任何分离字符(Bean 将尝试将其读取为尝试设置为 的值)。所以我的问题是:我如何utf8?jdbc:mysql://localhost:3306/<database>?useUnicode=yes&amp;characterEncoding=utf8my.iniutf8<property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />yes;characterEncoding=utf8useUnicode


答案 1

此问题可能是由指定 utf8 而不是 UTF-8 引起的。从使用字符集和 Unicode

在客户端指定字符编码时,请使用 Java 样式的名称。下表列出了MySQL字符集名称和相应的Java样式名称...

utf8 映射到 UTF-8。请尝试以下 JDBC 网址:

jdbc:mysql://localhost:3306/?useUnicode=yes&characterEncoding=UTF-8


答案 2

请注意,如果您使用的是 Spring Boot,则可以使用 其中的属性执行此操作,而不必向连接字符串添加额外的参数:application.properties

将其放入 application.properties 中:

spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;

推荐