JDBC 字符编码

Posted

技术标签:

【中文标题】JDBC 字符编码【英文标题】:JDBC character encoding 【发布时间】:2011-03-03 16:57:33 【问题描述】:

我有一个 Java Web 应用程序在 GlassFish 3 和 mysql 上的 JPA (EclipseLink) 上运行。我面临的问题是,如果我使用update() 方法将实体保存到数据库中,String 字段将失去完整性;显示'?' 而不是某些字符。

服务器、页面和数据库配置为使用UTF-8

我发布表单数据后,下一页正确显示数据。此外,在 NetBeans 调试中“似乎”当前实体的 String 属性也存储了正确的值。不知道 NetBeans 调试是否可信;可能是它解码正确,但它不正确。

【问题讨论】:

数据库是什么,你用的是什么连接字符串? 我用的是 MySQL,连接字符串是:jdbc:mysql://localhost:3306/administer 一个链接给那些希望使用 utf8mb4 的人:dev.mysql.com/doc/connector-j/en/… 【参考方案1】:

新版 JDBC 驱动自动检测字符编码。 您不需要显式设置它。

【讨论】:

【参考方案2】:

我还必须添加 useUnicode=true,所以我必须用 '&' 连接参数,所以它看起来像这样:

jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&characterEncoding=UTF-8

如果您像我一样使用 maven 配置文件来设置 MySQL URL,请确保使用 & 而不是 &,因为 maven 在将 persistence.xml 文件写入类文件夹时会取消转义 url。

【讨论】:

【参考方案3】:

我用以下方法解决了这个问题:我使用 GlassFish 管理界面将此属性添加到我的连接池的设置中:

字符编码 = UTF-8

【讨论】:

【参考方案4】:

决定编码的是 JDBC,而不是 JPA:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8

【讨论】:

对于那些遇到同样问题的人来说只是一个旁注:如果你想在persistence.xml的JDBC url中链接参数,你必须将&重写为&。示例:jdbc:mysql://localhost:3306/administer?rewriteBatchedStatements=true&characterEncoding=UTF-8 对于较新版本的 jdbc 驱动程序 (>= 5.1.13),不要指定“characterEncoding”。看看:***.com/a/18059663/967062

以上是关于JDBC 字符编码的主要内容,如果未能解决你的问题,请参考以下文章

Firebird JDBC 驱动连接字符编码

JDBC 和 Mybatis连接mysql数据库的时候,设置字符集编码

DB2的JDBC连接字符串有数据库字符集编码的配置参数吗

使用 JDBC Oracle Thin 驱动程序的错误字符串编码

MySQL 配置使用 utf8 字符编码的 JDBC url

哪些地方需要考虑字符编码