达梦数据库(DM8)中LENGTH_IN_CHAR参数的说明

错误场景还原

今天在利用DEXP、DIMP工具做达梦数据库(DM8)的测试工作的时候,导入数据时,工具提示[警告]服务器与文件内数据的LENGTH_IN_CHAR参数不匹配【警告】可能会有错误发生。在这里插入图片描述
这是因为源数据库、目的数据库的初始化参数LENGTH_IN_CHAR设置不一致的原因。

LENGTH_IN_CHAR参数说明

VARCHAR 类型对象的长度是否以字符为单位。取值:1、Y 表示是,0、N 表示否。默认值为 0。可选参数。

  • 1 或 Y:是,所有 VARCHAR 类型对象的长度以字符为单位。这种情况下,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况(超过的时候往往是因为有数字或是英文字符占位较少造成的),这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为 8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;

  • 0 或 N:否,所有 VARCHAR 类型对象的长度以字节为单位。

  • 数据库中设定LENGTH_IN_CHAR为1或Y时,字段长度没有超过8188时,其实际的占用的字节长度根据ASCII字符+CHARSET/UNICODE_FLAG参数定义的字符集单字符的宽度*该种字符数。

举个例子

比如字段类型同样都是VARCHAR(10),UNICODE_FLAG取值GB18030。当LENGTH_IN_CHAR取值1(以字符为单位)时,那么最多可以存放10个中文字符,空间最多占用20个字节,存放10个中文后,使用字符统计相关命令,如LENGTH(字段名)时,得到的值应该是10,而用LENGTHB(字段名)时,得到的值是20;当LENGTH_IN_CHAR取值0(以字节为单位)时,那么最多可以存放5个中文字符,空间占用了10个字节,在存放5个中文后使用字符统计相关命令,使用LENGTH命令得到的是5,LENGTHB得到的值是10。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值