为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: v8.1.2.128_ent_x86_64_ctm_pack4
【操作系统】:centos7
【CPU】: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
【问题描述】*:
用docker安装的数据库:
// 加载镜像
docker load -i dm8_20220822_rev166351_x86_rh6_64_ctm.tar
// 运行容器
docker run -d -p 5236:5236 --restart=always --name dm8 --privileged=true -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e INSTANCE_NAME=dm8 -v /data/dm8:/opt/dmdbms/data dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4
pisql是正常的:
SQL> select * from department;
LINEID DEPARTMENT_ID DEPARTMENT_NAME
---------- ------------- ---------------------
1 666 数据库产品中心
客户端用jdbc连接的时候,出现中文乱码:
jdk的版本:
java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
jdbc的版本:
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.1.193</version>
</dependency>
@Test
public void testJdbc() throws Exception{
Class.forName("dm.jdbc.driver.DmDriver");
Connection connection = DriverManager.getConnection("jdbc:dm://192.168.137.138:5236?LANGUAGE=EN",
"DM", "dameng123");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from department");
while(resultSet.next()){
System.out.println(resultSet.getString(1) + " : " +resultSet.getString(2));
}
resultSet.close();
statement.close();
connection.close();
}
输出结果乱码:
麻烦大佬帮忙看看,多谢
字符集应当是从SERVER侧协商,请使用与SERVER相同版本JDBC驱动进行测试
debug了下客户端的代码,发现一个问题:

客户端在创建连接的时候,把编码给写死了,而且没有给重新赋值的方法:
收到服务端返回的数据的时候,如果按照GB18030来编码就是乱码,但是如果用UT-8来编码就是正常的了:

调用堆栈:

是jdbc驱动有bug吗?