一、验证char长度限制
- 创建一个表,char类型的
create table t(ename char(4)); - 插入数据
insert into t2 values('abcd');
insert into t2 values('abcde');
结论:长度5超过字符定义限制
二、AL32UTF8 时字节长度
- 查看字符集
select * from nls_database_parameters where parameter like '%CHARACTERSET%'; - 插入数据
insert into t values('中国');
结论:AL32UTF8下,1个汉字3个字节,2个汉字6个字节,长度超过字符定义限制
三、修改字符集为ZH16GBK
- 修改字符集必须在RESTRICT模式下,否则会报错
- 重启库至RESTRICT模式
- 修改字符集
alter database character set INTERNAL_USE ZHS16GBK; - 重启数据库
- 验证
注意:此处为实验,平时禁止修改字符集,避免生产数据出现乱码
四、ZH16GBK 时字节长度
插入数据
insert into t2 values('中国');
insert into t2 values('中国人');
结论:ZH16GBK下,1个汉字2个字节,3个汉字6个字节
五、字符和字节区别
- 创建测试表2
create table t2(ename char(4 char)); - 测试
insert into t values('中国');
insert into t2 values('中国');
结论:中国虽然是6个字节,但是满足4个字符的条件,没有报错