注册

达梦数据库varchar 类型中文乱码问题(arm odbc驱动)

hju123894k 2022/11/03 1878 6

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM Database Server 64 V8,DB Version: 0x7000c
【操作系统】:麒麟10
【CPU】:arm
【问题描述】*:达梦数据库varchar 类型中文乱码问题

插入sql:

INSERT INTO "test_audit"."operation" "role", "source" VALUES (?, ?)", values: [VARCHAR("管理员"), VARCHAR("API")]

这里以 operation表的role 字段为例,插入值 管理员

tcp 抓包分析
image.png

  • 传输相关数据是:\xE7\xAE\xA1\xE7\x90\x86\xE5\x91
  • 预期数据是: \xE7\xAE\xA1\xE7\x90\x86\xE5\x91\x98
  • 通过抓包分析,在数据传入到达梦的过程中,管理员汉字被截取的一个字节

通过c 程序验证

https://eco.dameng.com/document/dm/zh-cn/app-dev/c_c++_odbc.html

以达梦odbc demo为例,在数据权限网关容器中便携相关c 程序,插入相关数据

抓包分析,同样也会被截取一个字节的数据

修改大梦数据库编码

重新在arm 环境中搭建达梦数据库,修改数据库编码为 utf8!

0 代表 gb18030;1 代表 UTF-8

SQL> select unicode;
+------------+
| unicode    |
+------------+
| 1          |
+------------+
SQLRowCount returns 1
1 rows fetched
SQL>

重新插入数据,数据依然乱码

抓包依然显示截断一个字节

总结

通过输出日志和抓包分析,arm 环境下达梦odbc-driver 对于中文编码会出现截取字节的问题,导致存储到数据库的数据错误;

回答 0
暂无回答
扫一扫
联系客服