记录一下:国产化过程中使用达梦数据库遇到的问题

在使用达梦数据库的时候,很多时候达梦库报错的错误提示非常模糊,可以说基本上没什么用。

  1. dm.jdbc.driver.DMException: 字符串截断
    我这里遇到的问题是在MySQL中字段的类型是varchar(10),在目标达梦库中字段类型是VARCHAR(10);
    遇到的问题是将mysql中的数据插入到达梦就会报错。
    原因:
    MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。gb18030 字符集,varchar(2) 才可以存一个汉字;UTF-8 字符集,varchar(3) 才可以存一个汉字。

解决方案
在达梦数据库中,LENGTH_IN_CHARUNICODE_FLAG 参数需要在数据库初始化时设置,一旦实例创建完成,这些参数无法修改。因此,如果需要调整这些参数,必须重新初始化数据库实例;类似于 MySQL 的行为,可以设置以下参数组合:

UNICODE_FLAG=1(使用 UTF-8 字符集)。
LENGTH_IN_CHAR=1(VARCHAR 长度以字符为单位)。

在这种配置下:
一个汉字占用 3 个字节,但 VARCHAR 的长度单位是字符,而不是字节。
例如,VARCHAR(1) 可以存储 1 个汉字或 1 个英文字母。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐