x0710 发表于 2022-7-28 10:51

JDBC读取数据时乱码

本帖最后由 x0710 于 2022-7-28 14:11 编辑

下面是数据库的配置
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client   | utf8mb4                                                 |
| character_set_connection | utf8mb4                                                 |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                |
| character_set_results    | utf8mb4                                                 |
| character_set_server   | utf8mb4                                                 |
| character_set_system   | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+
表的编码是utf8mb4
这个是在命令行上查询的数据
+------+----------------------------------+
| word | translation                      |
+------+----------------------------------+
| this | pron. 这, 本
a. 这, 本
adv. 这么            |
+------+----------------------------------+
JDBC一连接就乱码了。连接url后面有?characterEncoding=utf-8,不管用,这是源码
String url = "jdbc:mysql://localhost:3306/calture?characterEncoding=utf-8";
               
                try{
                        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                        c = DriverManager.getConnection(url, user, password);
                }
                catch(Exception e) {
                        System.out.println(e);
                }
                Statement s = null;
                try{
                        s = c.createStatement();
                        ResultSet rs = s.executeQuery("SELECT * FROM enwords WHERE word='this'");
                        while(rs.next()) {
                              String word = rs.getString("word");
                              String translation = new String(rs.getString("translation"));
                              System.out.println("word: "+word);
                              System.out.println("translation: "+translation);
                        }
                }
                catch(Exception e) {
                        System.out.println(e);
                }
                finally{
                        s.close();
                }
下面这个是JDBC查询的结果(默认应该是UTF-8)
word: this
translation: pron. 脮芒, 卤戮
a. 脮芒, 卤戮
adv. 脮芒脙麓
转码后的(JDBC结果用GBK编码的)
word: this
translation: pron. ??, ±?
a. ??, ±?
adv. ????
求帮助,百度的方法都试遍了。
Ps我是记事本写的,cmd上运行的,没有调试工具。


回帖启示我要用调试,在这里谢谢你们,就不一一回复了。

小年轻在奋斗 发表于 2022-7-28 11:29

本帖最后由 小年轻在奋斗 于 2022-7-28 11:30 编辑

看一下你的表结构的字段编码设置,如果是先建表后该的数据库的编码设置,表的编码设置是不会变的;
还有就是看下你IDE设置的控制台输出的编码格式是不是UTF-8

bean0283 发表于 2022-7-28 11:29

idea 右下角有个编码,你看看切换一下,换成GBK或者UTF-8分别重新执行看看,我感觉应该就是控制台打印显示的问题

lijingboforever 发表于 2022-7-28 11:32

感觉是 IDE 控制台编码问题,设置下编码

yanjingtu 发表于 2022-7-28 12:55

赞同沙发观点,可以show create table xxx;看一下这个表的实际建表、建字段的编码情况

cwl 发表于 2022-7-28 13:56

这个应该属于输出编码的问题,debug一下,看看返回的值是否正常,正常的话就是控制台输出问题,IDE和对应启动器的编码都设置一下就好了

x0710 发表于 2022-7-28 14:07

就是说,我是notpad++写的,在控制台运行的啊啊啊
表没有问题,是utf8mb4,数据也无乱码

tencentma 发表于 2022-7-28 14:08

编码格式有没有问题啊

x0710 发表于 2022-7-28 14:44

tencentma 发表于 2022-7-28 14:08
编码格式有没有问题啊

??和这个才有关系吗,用的utf8写的文件,javac -encoding utf8编译的

knian 发表于 2022-7-28 14:46

可以试试重新建数据库,选utf8格式的

为啥不用mybatis之类的框架查询?

页: [1] 2
查看完整版本: JDBC读取数据时乱码