JDBC字符编码

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

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

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

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

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

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

characterEncoding = UTF-8

新版JDBC驱动程序自动检测characterEncoding。 您无需明确设置它。

我不得不添加useUnicode = true,所以我不得不用’&’连接参数,所以它看起来像这样:

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

如果您正在使用maven配置文件设置MySQL URL,请像我一样确保放置& 相反& 因为在将persistence.xml文件写入classes文件夹时,maven会将url视为unecape。