理解LENGTH_IN_CHAR 和CHARSET的影响情况

文章详细描述了在不同LENGTH_IN_CHAR和CHARSET设置下,如何影响达梦数据库的varchar类型字符存储,包括英文、中文字符的插入限制。实验涵盖了GB18030和UTF-8字符集,并揭示了字符计数方式对存储容量的影响。
摘要由CSDN通过智能技术生成

理解LENGTH_IN_CHAR 和CHARSET的影响情况

测试一
1.初始化实例
初始化一个实例:LENGTH_IN_CHAR=0,CAHRSET=0,即:使用 GB18030 字符集,varchar长度以字节为单位,汉字一般需要占用两个字节。
./dminit PATH=/home/dataproda DB_NAME=PRODA instance_name=PRODA SYSDBA_PWD=Dameng123 PORT_NUM=5237 LENGTH_IN_CHAR=0 CAHRSET=0
注册实例:
./dm_service_installer.sh -t dmserver -p PRODA -dm_ini /home/dataproda/PRODA/dm.ini
启动实例:
[dmdba@localhost bin]$ ./DmServicePRODA start
Starting DmServicePRODA: [ OK ]
创建一张测试表:
create table test(name varchar(10));
2.插入数据,测试插入 10 个英文字符成功,插入 11 个英文字符失败,如下:
insert into test values(‘qwertyuiop’);
insert into test values(‘ABCDEFGHIJ’);
insert into test values (‘abcdefghijk’);

3.测试插入中文字符,插入5个中文成功,6个中文失败,5个中文加1个字母失败:
insert into test values (‘达梦数据库’);
insert into test values (‘达梦数据库棒’);
insert into test values (‘达梦数据库 g’);

测试二
1.初始化一个实例:LENGTH_IN_CHAR=1,CAHRSET=0,即:使用 GB18030 字符集,varchar按字符来计数。
./dminit PATH=/home/dataproda DB_NAME=PRODA instance_name=PRODA SYSDBA_PWD=Dameng123 PORT_NUM=5237 LENGTH_IN_CHAR=1 CHARSET=0
创建表并测试插入数据,插入20个字母正常,插入21个字母失败:
create table test(name varchar(10));
insert into test values( ‘ABCDEFGHIJqwertyuiop’ );
insert into test values( ‘ABCDEFGHIJqwertyuiopa’);

3.插入中文进行测试,插入10个中文成功,11个中文失败,10个中文加1个字母失败:
insert into test values (‘达梦数据库棒棒棒棒棒’);
insert into test values (‘达梦数据库棒棒棒棒棒棒’);
insert into test values (‘达梦数据库棒棒棒棒棒 A’);

测试三
初始化一个实例:LENGTH_IN_CHAR=0,CAHRSET=1,即:使用 UTF-8 字符集,varchar长度以字节为单位。
1、创建表并测试插入数据,插入10个字母正常,插入11个字母失败:
create table test(name varchar(10));
insert into test values( ‘ABCDEFGHIJ’ );
insert into test values( ‘ABCDEFGHIJK’);

2.插入中文进行测试,插入3个中文成功,4个中文失败,3个中文加1个字母成功,3个中文加2个字母失败:
insert into test values( ‘周一波’ );
insert into test values( ‘周一波阿’ );
insert into test values( ‘周一波a’);
insert into test values( ‘周一波aB’);

测试四
初始化一个实例:LENGTH_IN_CHAR=1,CAHRSET=1,即:使用 UTF-8 字符集,varchar长度以字符为单位。
1.创建表并测试插入数据,插入40个字母成功,插入41个字母失败:
create table test(name varchar(10));
insert into test values(‘abcdefghigabcdefghigabcdefghigabcdefghig’);
insert into test values(‘abcdefghigabcdefghigabcdefghigabcdefghiga’);

2.插入中文进行测试,插入13个中文成功,14个中文失败,13个中文加1个字母成功,13个中文加2个字母失败:
insert into test values(‘达梦数据库达梦数据库达梦数’);
insert into test values(‘达梦数据库达梦数据库达梦数据’);
insert into test values(‘达梦数据库达梦数据库达梦数a’);
insert into test values(‘达梦数据库达梦数据库达梦数aB’);

学习心得
1.CHARSET=0,LENGTH_IN_CHAR=0
这是初始化数据库时的默认配置,字符集为gb18030,varchar长度以字节为单位,汉字一般需要占用两个字节。
2.CHARSET=1,LENGTH_IN_CHAR=0
字符集为UTF-8,varchar长度以字节为单位,汉字一般占据三个字节。
3.CHARSET=0,LENGTH_IN_CHAR=1
字符集为GB18030,在length_in_char=1的情况下,varchar按字符来计数,varchar的实际可存储字节数会按2倍的比例放大。
例如定义varchar(10),那么就可以存储10 * 2 = 20个字节的数据
4.CHARSET=1,LENGTH_IN_CHAR=1
字符集为UTF-8,varchar长度以字符为单位,varchar的实际存储字节数会按4倍的比例放大。
例如定义varchar(10),那么就可以存储10 * 4 = 40个字节的数据。

如有兴趣可以上达梦社区查看详情:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值