如何使用 JDBC 从 Mysql 中检索正确编码的数据

Posted

技术标签:

【中文标题】如何使用 JDBC 从 Mysql 中检索正确编码的数据【英文标题】:how to retrieve Data in correct encoding from Mysql using JDBC 【发布时间】:2012-09-01 06:35:07 【问题描述】:

当我使用 sql 插入数据(包括法语字符)到我的数据库时,它工作正常:

   CREATE TABLE Categories(code_interne_c varchar(100) primary key,
                           description    varchar(100));

   INSERT INTO Categories  VALUES ('01','Matières premières');
   INSERT INTO Categories  VALUES ('02','Articles de conditionnement');
   INSERT INTO Categories  VALUES ('03','Consommables production');
   INSERT INTO Categories  VALUES ('04','Produits de nettoyage');
   INSERT INTO Categories  VALUES ('05','Réactifs');

当我使用 mysql 命令行时,它也可以正常工作(如您所见,它是正常的和预期的输出):

   mysql> select * from categories;
   +----------------+-------------------------------------------+
   | code_interne_c | description                               |
   +----------------+-------------------------------------------+
   | 01             | Matières premières                        |
   | 02             | Articles de conditionnement               |
   | 03             | Consommables production                   |
   | 04             | Produits de nettoyage                     |
   | 05             | Réactifs                                  |
   +----------------+-------------------------------------------+
   14 rows in set (0.00 sec)

但是当我使用 jdbc 检索数据时:

public static String testreqchar()
    try 
        Statement st = cx.createStatement();
        ResultSet rs = st.executeQuery("select * from categories");
        rs.next();
        return rs.getString(2)+"|| and  test French accent characters : é ô ê à è û ";
     catch (SQLException ex) 
        Logger.getLogger(Methodes.class.getName()).log(Level.SEVERE, null, ex);
        return null;
    

public static void main(String a[]) 

           System.out.println(testreqchar());

这是我在 IDE 和接口中得到的输出:

    MatiŠres premiŠres|| and  test French accent characters : é ô ê à è û

我不知道是什么问题。

   Mysql 5.5.27 set on UTF-8 as charset on Win server 2008 R2 French
   mysql-connector-java-5.1.21
   JDK 1.7 Running on win 7 pro French.

【问题讨论】:

到目前为止,我可以正式宣布这不是 IDE 编码问题,而是 Mysql 或 JDBC 问题。 【参考方案1】:

useUnicode=true&characterEncoding=UTF8 放在连接字符串的末尾。查看示例,

      Connection conn = DriverManager.getConnection  
        ( "jdbc:mysql://localhost/bug_utf8?useUnicode=true&characterEncoding=UTF8"  

【讨论】:

@Papa_Jay 检查 IDE 的 UTF-8 设置。如果您的应用程序是 Web 应用程序,您还可以检查您的浏览器字符编码。 这是一个 Java 桌面应用程序,IDE 是 Netbeans 7.2,找不到任何更改终端字符集的选项。 我不知道为什么这个错误没有解决方案,这让我很紧张:s 没有人帮忙,尝试了所有解决方案和技术,仍然得到这个恶魔般的畸形数据表示,数据库终端显示良好的编码,但为什么它在应用程序基础上是畸形的:s 不是IDE的问题,是Mysql的bug,或者是JDBC的问题,再看我的帖子。

以上是关于如何使用 JDBC 从 Mysql 中检索正确编码的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jdbc 和 MySQL 正确设置 utf8 编码?

使用 JDBC 从 MySQL 获取图像

如何使用 jdbc 连接从数据库中检索数据并将其显示在 jsp 文本字段中

JDBC 字符编码

使用 chardet 检测带有 JDBC 的 MySQL 数据库中的错误编码

JDBC:如何从结果集中检索 SQL COUNT 函数的结果?