dm数据库初始化数据库VARCHAR类型是否以字符为单位

dm数据库初始化数据库VARCHAR类型是否以字符为单位

在初始化dm数据库的时候,我们有以下这两个跟字符集有关的参数,UNICODE_FLAGLENGTH_IN_CHAR

UNICODE_FALG : 此参数表示了数据库中所有数据的字符集,包括数据字典的字符集。需要注意的是,数据库一旦初始化完成,字符集就将无法修改。我们可以使用select unicode来查询当前数据库的字符集种类,0代表gb18030,1代表UTF-8。

LENGTH_IN_CHAR : 此参数决定了,数据库中的VARCHAR类型对象的长度是否以字符为单位。取值为1则设置为以字符为单位,将存储长度值按照理论字符长度进行放大。取值为0则所有 VARCHAR 类型对象的长度以字节为单位。

1.windows下

安装好dm,初始化数据库实例时可以手动勾选,默认不勾选则以字节为单位

1630568690.png

查询当前dm数据库使用的字符集和是否以字符为单位!1630568709.png

创建表TEST1 进行插入英文进行测试

create table test(c1 varchar(10));

-- 插入10个英文,正常
insert into test(c1) values('ABCDEFGHIJ');

-- 插入20个英文,正常
insert into test(c1) values('ABCDEFGHIJABCDEFGHIJ');

-- 插入21个英文,错误如下图
insert into test(c1) values('ABCDEFGHIJABCDEFGHIJA');

image-20210902144448648.png

表TEST1 进行插入中文进行测试

-- -- 插入10个中文,正常
insert into test(c1) values('测试一下测试一下测试');

-- -- 插入11个中文,错误
insert into test(c1) values('测试一下测试一下测试一');


-- -- 插入10个中文,一个英文,错误
insert into test(c1) values('测试一下测试一下测试A');

image-20210902144819862.png

CHARSET/UNICODE_FLAG 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]

配置字段长度英文存储个数中文存储个数实际字节数备注
UNICODE_FLAG=0 LENGTH_IN_CHAR=0VARCHAR(10)10510中文占2字节
UNICODE_FLAG=0 LENGTH_IN_CHAR=1VARCHAR(10)201020中文占2字节,以字符为单位, 自动扩充为双倍字节数
UNICODE_FLAG=1 LENGTH_IN_CHAR=0VARCHAR(10)103.310中文占3字节
UNICODE_FLAG=1 LENGTH_IN_CHAR=1VARCHAR(10)4013.340中文占3字节,以字符为单位, 自动扩充为4倍

2.linux环境下

image-20210902152759011.png

安装完达梦服务后 需要实例化数据库 cd dm/bin目录下,执行命令

./dminit LENGTH_IN_CHAR=1

image-20210902153357970.png

设置 达梦数据库以字符作为varchar的单位长度,0代表以字节

启动dmserver

./dmserver ./DAMENG/dm.ini

使用dm管理工具连接到linux上的服务 可以看到LENGTH_IN_CHAR 已经修改为1

image-20210902154023970.png

测试结果同windows

阅读 4.3k
2 个回答
✓ 已被采纳
需要注意 dm数据库启动时要设置是否以字符或者字节为单位哦

好吧 发错了 应该是文章而不是提问

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏