【问题标题】:Java Encoding, Connection to Database [duplicate]Java 编码,连接到数据库 [重复]
【发布时间】:2014-11-13 10:40:57
【问题描述】:

我最近将我的 latin1 数据库转换为 utf8。我所有的排序规则和连接属性都设置为 utf8,我也在使用 &useUnicode 作为 mysql 驱动程序 url。

问题是,由于 Java 将字符串存储在 utf16 中,我是否需要进行一些转换,或者驱动程序是否将其从 utf16 即时转换为 utf8 以进行连接,反之亦然? 我确实问过一般情况,但也问过我们目前使用的 spring jdbc。

编辑: 假设用户键入任何类型的字符串,无论它是什么编码到摇摆 JTextField 中。 Java 接受它,将其转换为 utf16 并存储它。如果我告诉我的 jdbc 驱动程序我将发送的所有数据都已经是 utf8 并且它不应该转换,那是怎么回事。 当然我做了测试,效果很好,但是为什么呢?

【问题讨论】:

  • 你为什么不试试告诉我们? :)
  • 这太好了,不能持久......所以我最好问一下:)
  • java 不会在 UTF-16 中“存储”字符串,它将字符处理为 Unicode,内部表示无关紧要,你告诉它你想如何在外部“存储”它们。您将其保留为您选择的默认值。大多数人在外部将它们呈现为 UTF-8。
  • 所以通过 utf8 连接从数据库获取字符串将使 rs.getString("Col") 与 new String(rs.getString("Col").getBytes(),"utf8 的输出相同")?

标签: java mysql spring jdbc


【解决方案1】:

utf16和utf8之间的转换是双向的。所以我认为你不需要做任何转换,只要你尽可能在你的java代码中指定'read this as utf8'。如果您从数据库中读取原始字符串,您可能根本不需要指定,当它检测到您的数据库中的编码时,您的驱动程序/ORM 应该接受它。

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2019-08-20
    • 2016-01-16
    相关资源
    最近更新 更多