【问题标题】:JDBC character encodingJDBC 字符编码
【发布时间】:2011-03-03 16:57:33
【问题描述】:

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

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

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

【问题讨论】:

  • 数据库是什么,你用的是什么连接字符串?
  • 我用的是 MySQL,连接字符串是:jdbc:mysql://localhost:3306/administer
  • 一个链接给那些希望使用 utf8mb4 的人:dev.mysql.com/doc/connector-j/en/…

标签: java mysql jdbc character-encoding


【解决方案1】:

新版 JDBC 驱动自动检测字符编码。 您不需要显式设置它。

【讨论】:

    【解决方案2】:

    我还必须添加 useUnicode=true,所以我必须用 '&' 连接参数,所以它看起来像这样:

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

    如果您像我一样使用 maven 配置文件来设置 MySQL URL,请确保使用 & 而不是 &,因为 maven 在将 persistence.xml 文件写入类文件夹时会取消转义 url。

    【讨论】:

      【解决方案3】:

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

      字符编码 = UTF-8

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 对于那些遇到同样问题的人来说只是一个旁注:如果你想在persistence.xml的JDBC url中链接参数,你必须将&重写为&。示例:jdbc:mysql://localhost:3306/administer?rewriteBatchedStatements=true&characterEncoding=UTF-8
        • 对于较新版本的 jdbc 驱动程序 (>= 5.1.13),不要指定“characterEncoding”。看看:stackoverflow.com/a/18059663/967062
        猜你喜欢
        • 2012-08-11
        • 2013-04-26
        • 1970-01-01
        • 2012-10-20
        • 2019-04-03
        • 2012-12-17
        • 2016-08-10
        • 2013-08-06
        • 2018-04-14
        相关资源
        最近更新 更多