Docker安装达梦M8数据库,Jdbc客户端乱码解决方案

news2024/10/1 15:14:45

Docker安装达梦M8

下载镜像tar包:https://eco.dameng.com/download/

#导入镜像
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

创建表

CREATE TABLE employee
(
  employee_id INTEGER,
  employee_name VARCHAR2(20) NOT NULL,
  hire_date DATE,
  salary INTEGER,
  department_id INTEGER NOT NULL
);
INSERT INTO employee VALUES (9999, '王达梦','2008-05-30 00:00:00', 30000, 666);
commit;

客户端访问

导入依赖

<dependency>
	<groupId>com.dameng</groupId>
	<artifactId>DmJdbcDriver18</artifactId>
	<version>8.1.2.192</version>
</dependency>

测试代码:

@Test
public void testMybatis(){
    List<Employee> employees = employeeMapper.selectAll();
    System.out.println(JSON.toJSONString(employees));
}
//输出结果:
[{"departmentId":666,"employeeId":9999,"employeeName":"鐜嬭揪姊�","hireDate":"2008-05-30","salary":30000}]

可以看到中文乱码了。

乱码的原因

创建DmdbConnection的时候,硬编码了serverEncoding:
在这里插入图片描述
当客户端收到服务端返回的数据的时候就是使用这个serverEncoding做字符串编码:
在这里插入图片描述
但是查看服务器的编码竟然是GB18030:

SQL> select unicode() from dual;

LINEID     UNICODE()  
---------- -----------
1          0

used time: 1.942(ms). Execute id is 501.
SQL> 
0代表是GB18030

肯定是有地方出bug了。

解决办法

  • 如果是使用springboot的连接池
    重写HikariDataSource的getConnection()方法,在里面去修改serverEncoding即可:
public class HikariDataSource extends com.zaxxer.hikari.HikariDataSource {
    @Override
    public Connection getConnection() throws SQLException{
        Connection proxyConnection = super.getConnection();
        HikariProxyConnection conn = (HikariProxyConnection) proxyConnection;
        DmdbConnection dmdbConnection = conn.unwrap(DmdbConnection.class);
        dmdbConnection.setServerEncoding(StandardCharsets.UTF_8);
        return proxyConnection;
    }
}
@Configuration
public class DataSourceConfig {
    @Autowired
    private DataSourceProperties dataSourceProperties;
    @Bean
    public HikariDataSource hikariDataSource(){
        com.github.xjs.dameng.config.HikariDataSource ds = new com.github.xjs.dameng.config.HikariDataSource();
        ds.setDriverClassName(dataSourceProperties.getDriverClassName());
        ds.setJdbcUrl(dataSourceProperties.getUrl());
        ds.setUsername(dataSourceProperties.getUsername());
        ds.setPassword(dataSourceProperties.getPassword());
        return ds;
    }
}
  • 如果是使用原生的jdbc连接,反射修改serverEncoding即可
private static void fixEncoding(Connection connection){
    if(connection instanceof DmdbConnection){
        DmdbConnection dmdbConnection = (DmdbConnection)connection;
        dmdbConnection.setServerEncoding(StandardCharsets.UTF_8);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理者必修的7门课

在现代商业世界中&#xff0c;管理者需要具备各种技能和知识&#xff0c;以便有效地领导他们的团队&#xff0c;并使他们的组织成功地达到其目标。虽然管理是一门复杂的学科&#xff0c;但有一些核心课程对于所有管理者来说都是必学的。 在本文中&#xff0c;我们将探讨管理者…

Multi-sensor KIT 多传感器开发板

1.前言 经过一段时间的思考后&#xff0c;我决定设计一款能够兼容多个传感器的开发板。这个开发板由核心底板和扩展板组成&#xff0c;其中核心底板预留了多路的I2C、SPI、UART、ADC等接口&#xff0c;而扩展板则兼容了QMI8658A-EVB和CH101/201-EVB的支持。这个设计可以让我更…

redis-主从安装

解决问题 1.数据安全问题 2.高并发读问题 1.主节点和 redis-单节点安装一致 2.从节点 daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.rdb logfile redis.log pidfile redis.pidreplicaof 172.2…

【SCADA】测试KingIOServer连接ModbusTCP设备

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天测试KingIOServer连接ModbusTCP设备&#xff0c;下面记录测试过程。 一、ModbusTCP设备 利用ModbusSlave模拟Modbus从站设备。 1、打开ModbusSlave软件&#xff0c;点击菜单栏【Setup】—>【SlaveDefinition……

ESP32设备驱动-SCD40二氧化碳湿度和温度传感器驱动

SCD40二氧化碳湿度和温度传感器驱动 文章目录 SCD40二氧化碳湿度和温度传感器驱动1、SCD40介绍2、硬件准备3、软件准备4、驱动实现1、SCD40介绍 SCD4x 是 Sensirion 的下一代微型 CO2 传感器。 该传感器基于光声 NDIR 传感原理和 Sensirion 的专利 PASens 和 CMOSens 技术,以…

初学spring5(七)AOP就这么简单

学习回顾&#xff1a;初学spring5&#xff08;六&#xff09;静态/动态代理模式 一、什么是AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术…

什么是BFC?

BFC是什么东西? BFC 全称&#xff1a;Block Formatting Context&#xff0c; 名为块级格式化上下文。 W3C官方解释为&#xff1a;BFC是 Web 页面的可视 CSS 渲染的一部分&#xff0c;是块级盒子的布局过程发生的区域&#xff0c;也是浮动元素与其他元素交互的区域。 通俗一…

如何自己创建一个工具项目并上传到npm上使用

第一步&#xff1a;npm官网注册一个自己的账号 第二步&#xff1a;在cmd窗口创建一个项目&#xff08;这里我以vue3为例子&#xff09; npm create vite 项目名 选择框架&#xff1a; 选择语言&#xff1a; 在项目中使用命令安装项目依赖&#xff1a; npm i 运行项目&#…

华为mpls vpn跨域C-1方案配置案例

R1: dis current-configuration [V200R003C00] snmp-agent local-engineid 800007DB03000000000000 snmp-agent clock timezone China-Standard-Time minus 08:00:00 ip vpn-instance vpn1 //添加vpn实例vpn1 ipv4-family route-distinguisher 1:1 //RD标签 vpn-target 100:1 …

如何用javascript 实现条形码和二维码

条形码和二维码 条形码和二维码都是一种用于存储信息的编码系统&#xff0c;它们可以被扫描设备或图像识别设备读取。 1. 条形码&#xff1a; 由一组垂直线条组成&#xff0c;线条的粗细和间距不同可以表示不同的数字或字符。通常用于商品标识和销售管理&#xff0c;以便在商…

Zigbee MAC地址通信中发送模块指定了接收模块MAC地址却发送不了数据包的解决办法

Zigbee MAC地址通信中发送模块指定了接收模块MAC地址却发送不了数据包的解决办法 事情缘由 在做MAC地址通信的实验中&#xff0c;我将程序分别下载进模块&#xff0c;组网成功后&#xff0c;发送模块终端按下按键&#xff0c;接收模块协调器什么反应也没有&#xff0c;上位机…

(模拟) 657. 机器人能否返回原点 ——【Leetcode每日一题】

❓ 657. 机器人能否返回原点 难度&#xff1a;简单 在二维平面上&#xff0c;有一个机器人从原点 (0, 0) 开始。给出它的移动顺序&#xff0c;判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效…

STM32F4使用18B20温度传感器【串口显示、18B20传感器】

在物联网和嵌入式系统中&#xff0c;温度传感器是常用的传感器之一。18B20温度传感器是一种数字温度传感器&#xff0c;非常适合用于测量环境温度。 本篇博客将介绍如何使用正点原子团队的官方驱动代码读取18B20温度&#xff0c;并通过串口显示。 编写代码 首先&#xff0c;…

mac m1通过qemu和grub制作操作系统引导盘

文章目录 前言grub安装引导盘FAQ参考附录qemu安装ubuntuGRUB安装到回环设备吧啦吧啦... 前言 我电脑是mac m1芯片的&#xff0c;做了如下尝试&#xff0c;最终在第4种方式下成功&#xff1a; 开始用了parallels desktop安装了ubuntu 22版本的&#xff0c;因为本机是arm64芯片…

Linux学习-基础篇

Linux学习 学自尚硅谷武晟然老师&#xff0c;结合老师课堂内容和自己笔记所写博文。 文章目录 Linux学习基础篇桌面与终端文件系统一、文件系统和挂载点二、目录结构bin、sbinlib、lib64usrbootdevetchome、rootoptmedia、mntprocrunsrvsystmpvar Vim编辑器一、整体介绍和模式转…

GridView编辑更新时数据没有改变,总是原来的值

GridView编辑更新时数据没有改变&#xff0c;总是原来的值 猜测原因是&#xff1a;我在点击更新时又执行了page_load方法&#xff0c;又将数据库的值绑定到了gridview上&#xff0c;所以永远都是数据库的值 解决办法&#xff1a;判断页面是不是第一次加载。在page_load方法…

【论文笔记】FASTER SEGMENT ANYTHING:TOWARDS LIGHTWEIGHT SAM FOR MOBILE APPLICATIONS

前脚fast SAM刚发完&#xff0c;后脚mobile SAM就发了 &#xff0c;之前的论文笔记中我一直就认为fast SAM其实应该算是yolo的扩展工作&#xff0c;和原生的SAM架构相去甚远&#xff0c;而且在简介上直接就对&#xff08;gong&#xff09;比&#xff08;ji&#xff09;了FastSA…

VS2022运行一闪而过的解决方案

1.问题情景 编写完程序后&#xff0c;尝试在VS中编译链接运行&#xff08;使用快捷键F5或者fnF5或者ctrlfnF5&#xff0c;不同的电脑可能不太一样&#xff09;发现控制台一闪而过。 2.解决方案 解决方案&#xff1a;右击“项目”->“链接器”->“子系统”->修改为“…

云原生——什么是云原生?

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 伴随云计算的滚滚浪潮&#xff0c;云原生(CloudNative…

Matlab中统计矩阵中元素个数的方法

1、 tabulate函数 a [1,2,1,3,1,4,1,5,2,3,1,4,2,5,4,2];tabulate(a)第一列代表了元素&#xff0c;第二类代表该元素出现的个数&#xff0c;第三列代表该元素的占比。 2、find函数和length函数 判断矩阵a中元素2出现的次数 a [1,2,1,3,1,4,1,5,2,3,1,4,2,5,4,2]; length(…