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 字符编码的主要内容,如果未能解决你的问题,请参考以下文章
JDBC 和 Mybatis连接mysql数据库的时候,设置字符集编码
使用 JDBC Oracle Thin 驱动程序的错误字符串编码