2010-06-14 63 views
19

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

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

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

+3

什么是你使用的数据库和连接字符串? – 2010-06-14 20:47:09

+0

我使用的MySQL和连接字符串是:'jdbc:mysql:// localhost:3306/administer' – 2010-06-14 21:10:36

+0

这是一个链接,用于那些想使用utf8mb4的人:http://dev.mysql.com/doc/connector -j/en/connector-j-reference-charsets.html – 2014-10-15 08:28:56

回答

43

这是JDBC,不JPA是确定编码:

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

+1谢谢你非常有帮助:) – 2013-10-20 18:08:05

+1

只是为那些遇到同样问题的人提供了一个旁注:如果你想在持久化的JDBC url中链接参数.xml',你必须将'&'重写为'&'。例如:'jdbc:mysql:// localhost:3306/administer?rewriteBatchedStatements = true & characterEncoding = UTF-8' – 2014-08-22 21:02:46

+0

对于新版本的jdbc驱动程序(> = 5.1.13),不要指定“characterEncoding”。看看:http://stackoverflow.com/a/18059663/967062 – 2017-02-07 08:40:20

11

我用下面的解决了这个问题:我用了GlassFish管理界面这个属性添加到我的连接池的设置:

的characterEncoding = UTF-8

0

我不得不添加了useUnicode =也是如此,所以我不得不与'到Concat的参数“,所以它看起来是这样的:

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

如果你正在使用maven配置文件设置MySQL的URL,像我一样,要确保你把&代替&因为行家UNESCAPE的网址写persistence.xml文件时到类文件夹。

1

新版本的JDBC驱动程序自动检测characterEncoding。 您不需要明确设置它。