吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 713|回复: 12
收起左侧

[求助] JDBC读取数据时乱码

[复制链接]
x0710 发表于 2022-7-28 10:51
本帖最后由 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,不管用,这是源码
[Java] 纯文本查看 复制代码
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上运行的,没有调试工具。


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

免费评分

参与人数 1热心值 +1 收起 理由
Liroot + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小年轻在奋斗 发表于 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
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之类的框架查询?

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表