Java JDBC字符编码
我有一个Java Web应用程序在GlassFish3上运行,在MySQL上运行JPA(EclipseLink)。我面临的问题是,如果使用Java JDBC字符编码,java,mysql,jdbc,character-encoding,Java,Mysql,Jdbc,Character Encoding,我有一个Java Web应用程序在GlassFish3上运行,在MySQL上运行JPA(EclipseLink)。我面临的问题是,如果使用update()方法将实体保存到数据库中,String字段将失去完整性“?”,而不是某些字符 服务器、页面和数据库配置为使用UTF-8 发布表单数据后,下一页将正确显示数据。此外,在NetBeans调试中,“似乎”当前实体的String属性也存储了正确的值。我不知道NetBeans调试是否可信;可能是它解码正确,但它不正确。我用以下方法解决了它:我使用Glas
update()
方法将实体保存到数据库中,String
字段将失去完整性<将显示代码>“?”,而不是某些字符
服务器、页面和数据库配置为使用UTF-8
发布表单数据后,下一页将正确显示数据。此外,在NetBeans调试中,“似乎”当前实体的
String
属性也存储了正确的值。我不知道NetBeans调试是否可信;可能是它解码正确,但它不正确。我用以下方法解决了它:我使用GlassFish管理界面将此属性添加到连接池的设置中:
characterEncoding=UTF-8
确定编码的是JDBC,而不是JPA:
jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
我还必须添加useUnicode=true,所以我必须用“&”来表示参数,所以看起来像这样:
jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&amp;characterEncoding=UTF-8
如果您像我一样使用maven配置文件来设置MySQL URL,请确保将
&;amp代码>而不是&代码>因为maven在将persistence.xml文件写入classes文件夹时会取消显示url。新版本JDBC驱动程序会自动检测字符编码。
不需要显式设置。什么是数据库,使用什么连接字符串?我使用的是MySQL,连接字符串是:jdbc:mysql://localhost:3306/administer
为希望使用utf8mb4的用户提供的链接:对于遇到相同问题的用户,请附带说明:如果要在在您的persistence.xml
中,您必须将&
重写为&代码>。示例:jdbc:mysql://localhost:3306/administer?rewriteBatchedStatements=true&characterEncoding=UTF-8
对于较新版本的jdbc驱动程序(>=5.1.13),请不要指定“characterEncoding”。看看: