达梦数据库DM8-mysql迁移后字符串长度问题

一、项目场景

 公司新项目政企单位平台开发,由于甲方要求信创,导致不得不做数据库的切换。我们选用的的达梦数据库(DM8),一家国产十几年的上市企业所打造的数据库。


二、问题描述

 迁移达梦之后在同步mysql数据到达梦时候,出现varchar字段超长的情况,检查了mysql设置的varchar长度发现和同步过来的一致的,数据在mysql可以入库 在dm8就不能存入


三、原因分析

 达梦数据库在初始化数据库时候有两个参数UNICODE_FLAGLENGTH_IN_CHAR跟字符集相关。根据不同的字符集varchar所占长度是有所差异的。

  • UNICODE_FALG:此参数表示了数据库中所有数据的字符集,包括数据字典的字符集。
    需要注意的是,数据库一旦初始化完成,字符集就将无法修改。
    我们可以使用selectunicode来查询当前数据库的字符集种类,0代表gb180301代表UTF8
  • LENGTH_IN_CHAR:此参数决定了,数据库中的varchar类型对象的长度是否以字符为单位。
    取值为1则设置为以字符为单位,将存储长度值按照理论字符长度进行放大。 取值为0则所有varchar类型对象的长度以字节为单位。

四、解决方案

varcharvarchar存放可变长度的字符串,最大长度是2000,对于空串,varchar仍按空串处理。
varchar2:也是存放可变长度的字符串,最大长度是4000VARCHAR2把空串等同于null处理。

  • 如果你是UTF-8字符集,那么在设计表示后 varchar类型的字段长度可参考*4
  • 如果你是GBK字符集,那么在设计表示后 varchar类型的字段长度可参考*2

参考自己的编码类型去具体的设置字段长度

-- 1.查看字符集
select unicode from dual;

-- 2.查看初始化参数 LENGTH_IN_CHAR
select * from SYS.V$PARAMPTER where name like '%LENGTH_IN_CHAR%';

相关推荐

  1. 数据库DM8-mysql迁移字符串长度问题

    2024-07-22 19:32:02       16 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 19:32:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 19:32:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 19:32:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 19:32:02       55 阅读

热门阅读

  1. pip简介与工作原理

    2024-07-22 19:32:02       15 阅读
  2. 【Ubuntu】Ubuntu20修改MAC地址

    2024-07-22 19:32:02       13 阅读
  3. 一文带你了解提升私域成交的四大关键因素

    2024-07-22 19:32:02       16 阅读
  4. CH02_XAML

    CH02_XAML

    2024-07-22 19:32:02      15 阅读
  5. Underlay和Fabric

    2024-07-22 19:32:02       13 阅读
  6. uniapp使用WebSocket发消息缓慢问题

    2024-07-22 19:32:02       14 阅读
  7. web前端基础面试85题(一)

    2024-07-22 19:32:02       12 阅读