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。