日龄问题,从MySql数据库返回查询时,我得到的字符如ç而不是ç。如何解决MySql的JSON和Java的编码问题?
我使用的是一个非常简单的类来尝试钉住问题了下来:
package com.dataTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class EncodingTest {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager
.getConnection("jdbc:mysql://internalip:3306/databasename?" +
"user=user" +
"&password=password" +
"&characterEncoding=utf-8" +
"&useUnicode=yes");
PreparedStatement stmt =
connection.prepareStatement("SELECT * FROM `databasename`.teste_json;");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("info"));
}
rs.close();
stmt.close();
connection.close();
}
}
的信息加入到通过其他类的数据库,但我把它使用手动工作台改变,问题依然存在。
数据库归类为utf8_general_ci,表编码为utf8。
我真的不知道该怎么做。
编辑:
我复制JSON字符串为varchar(1500)字段,并将其完全打印。我忘了提及,查询(info)中提到的字段是JSON字段。
编辑2:它不是mojibake?
问题被关闭基于里克詹姆斯答案声称这是Mojibake。
Acording的问题Trouble with utf8 characters; what I see is not what I stored以下观察:
- 该字节被存储需要是UTF-8编码的。解决这个问题。
我认为他们存储正确。我做了一个简单的JSON的HEX,长度和CHAR_LENGTH这样的:
'[{\"é\": \"\"}]', '5B7B22C3A9223A2022227D5D', '12', '11'
- 连接插入和选择文本需要指定UTF8或utf8mb4时。解决这个问题。
的连接字符串指定的字符集:
&useUnicode=yes&characterEncoding=UTF-8
- 列需要声明CHARACTER SET UTF8(或utf8mb4)。解决这个问题。
那么,数据库已字符集/核对= UTF8/utf8_general_ci 该表具有核对utf8_unicode_ci 的JSON柱(这是有问题的一个)没有归类。
有多奇怪。
手动状态
MySQL的处理使用utf8mb4字符集和utf8mb4_bin核对在JSON上下文中使用字符串。其他字符集中的字符串将根据需要转换为utf8mb4。 (对于ascii或utf8字符集中的字符串,不需要转换,因为ascii和utf8是utf8mb4的子集。)
从https://dev.mysql.com/doc/refman/5.7/en/json.html
这是否意味着实际整理已经是正确的?
据我所知,插入服务器的信息是正确的(见HEX信息),所以问题是选择?但连接字符串似乎在所有形式中都是正确的。
编辑:不是一个复制。
在这种情况下的问题与其他问题中的问题不同,请参阅我自己对此问题的回答以及所提及的错误报告。
根据这些https://dev.mysql.com/doc/refman/5.7/en/json,您可能会遇到一些问题。html#json转换类型和https://bugs.mysql.com/bug.php?id=81677 – pvg
表的字符集/排序规则是每列的_default_。所以,如果专栏是沉默的,看看这张表。 –
表格的整理是utf8_general_ci,如问题所述。 –