我在MySQL上运行GlassFish 3和JPA(EclipseLink)上的Java Web应用程序。我面临的问题是,如果我使用update()
方法将实体保存到数据库,String
字段将失去完整性;显示'?'
而不是某些字符。
服务器,页面和数据库配置为使用UTF-8
。
发布表单数据后,下一页正确显示数据。此外,在NetBeans调试中“看起来”似乎当前实体的String
属性也存储了正确的值。 Dunno,如果可以信任NetBeans调试;可能是它正确解码,但它不正确。
答案 0 :(得分:49)
确定编码的是JDBC,而不是JPA:
jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
答案 1 :(得分:12)
我解决了以下问题:我使用GlassFish管理界面将此属性添加到我的连接池的设置中:
characterEncoding = UTF-8
答案 2 :(得分:3)
新版JDBC驱动程序自动检测characterEncoding。 您无需明确设置它。
答案 3 :(得分:0)
我还必须添加useUnicode = true,所以我不得不用'&'来连接参数所以它看起来像这样:
jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&characterEncoding=UTF-8
如果您正在使用maven配置文件来设置MySQL URL,请确保将&
改为&
,因为maven在将persistence.xml文件写入classes文件夹时会取消该URL。