dm数据库初始化数据库VARCHAR类型是否以字符为单位
在初始化dm数据库的时候,我们有以下这两个跟字符集有关的参数,UNICODE_FLAG和LENGTH_IN_CHAR。
UNICODE_FALG : 此参数表示了数据库中所有数据的字符集,包括数据字典的字符集。需要注意的是,数据库一旦初始化完成,字符集就将无法修改
。我们可以使用select unicode来查询当前数据库的字符集种类,0代表gb18030,1代表UTF-8。
LENGTH_IN_CHAR : 此参数决定了,数据库中的VARCHAR类型对象的长度是否以字符为单位。取值为1则设置为以字符为单位,将存储长度值按照理论字符长度进行放大。取值为0则所有 VARCHAR 类型对象的长度以字节为单位。
1.windows下
安装好dm,初始化数据库实例时可以手动勾选,默认不勾选则以字节为单位
查询当前dm数据库使用的字符集和是否以字符为单位!
创建表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');
表TEST1 进行插入中文进行测试
-- -- 插入10个中文,正常
insert into test(c1) values('测试一下测试一下测试');
-- -- 插入11个中文,错误
insert into test(c1) values('测试一下测试一下测试一');
-- -- 插入10个中文,一个英文,错误
insert into test(c1) values('测试一下测试一下测试A');
CHARSET/UNICODE_FLAG 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
配置 | 字段长度 | 英文存储个数 | 中文存储个数 | 实际字节数 | 备注 |
---|---|---|---|---|---|
UNICODE_FLAG=0 LENGTH_IN_CHAR=0 | VARCHAR(10) | 10 | 5 | 10 | 中文占2字节 |
UNICODE_FLAG=0 LENGTH_IN_CHAR=1 | VARCHAR(10) | 20 | 10 | 20 | 中文占2字节,以字符为单位, 自动扩充为双倍字节数 |
UNICODE_FLAG=1 LENGTH_IN_CHAR=0 | VARCHAR(10) | 10 | 3.3 | 10 | 中文占3字节 |
UNICODE_FLAG=1 LENGTH_IN_CHAR=1 | VARCHAR(10) | 40 | 13.3 | 40 | 中文占3字节,以字符为单位, 自动扩充为4倍 |
2.linux环境下
安装完达梦服务后 需要实例化数据库 cd dm/bin目录下,执行命令
./dminit LENGTH_IN_CHAR=1
设置 达梦数据库以字符
作为varchar的单位长度,0
代表以字节
启动dmserver
./dmserver ./DAMENG/dm.ini
使用dm管理工具连接到linux上的服务 可以看到LENGTH_IN_CHAR 已经修改为1
测试结果同windows