一、实验要求

深入理解CASE_SENSITIVE参数的作用,涉及大小写敏感的配置和差异

二、功能描述

  • LENGTH_IN_CHAR
    功能: VARCHAR 类型对象的长度是否以字符为单位。
    取值: 取值:1、Y 表示是,0、N 表示否。默认值为 0。1 或 Y:是,所有 VARCHAR 类型对象的长度以字符为单位。这种情况下,会将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。单存储的字节长度 8188 上限仍然不变。
    配置: dminit
    说明: 此参数在数据库创建成功后无法修改,可通过查询 V$PARAMETER 中的 LENGTH_IN_CHAR 参数名查看此参数的设置值。

  • CHARSET/UNICODE_FLAG
    功能: 此参数表示了数据库中所有数据的字符集,包括数据字典的字符集。
    取值: 取值:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0。
    配置: dminit
    说明: 数据库一旦初始化完成,字符集就将无法修改。可使用 select unicode 来查询当前数据库的字符集种类。

三、实验步骤

1 实验规划

配置字段长度英文存储个数中文存储个数实际字节数
GB18030LENGTH_IN_CHAR=0VARCHAR(5)52.5(实际2)
GB18030LENGTH_IN_CHAR=1VARCHAR(5)105
UTF-8LENGTH_IN_CHAR=0VARCHAR(5)51.6(实际1)
UTF-8LENGTH_IN_CHAR=1VARCHAR(5)206.6(实际6)

说明:
(1)GB18030中文占2各字符,UTF-8中文占3个字符;英文均只占一个字符。
(2)开启LENGTH_IN_CHAR后。如果字符集为GB18030,则varchar会自动扩充字节至2倍;如果字符集为UTF-8,则会自动扩充至最大长度的4倍。

2 数据库初始化

根据实验规划的不同参数,分别初始化DB1、DB2、DB3和DB4四个数据库:

DB1:./dminit path=/dm8/data DB_NAME=db1 instance_name=db1 port_num=6001 LENGTH_IN_CHAR=0 CHARSET=0;
DB2:./dminit path=/dm8/data DB_NAME=db2 instance_name=db2 port_num=6002 LENGTH_IN_CHAR=1 UNICODE_FLAG=0;
DB1:./dminit path=/dm8/data DB_NAME=db3 instance_name=db3 port_num=6003 LENGTH_IN_CHAR=0 UNICODE_FLAG=1;
DB1:./dminit path=/dm8/data DB_NAME=db4 instance_name=db4 port_num=6004 LENGTH_IN_CHAR=1 UNICODE_FLAG=1;
SQL> select unicode;

在这里插入图片描述

SQL> select * from v$parameter where NAME='LENGTH_IN_CHAR';

在这里插入图片描述

3 英文字符测试

SQL> create table t1(name varchar(5));
SQL> insert into t1 values('aaaaa');commit;
SQL> insert into t1 values('aaaaab');commit;
SQL> insert into t1 values('aaaaabbbbb');commit;
SQL> insert into t1 values('aaaaabbbbbc');commit;
SQL> insert into t1 values('aaaaabbbbbcccccddddd');commit;
SQL> insert into t1 values('aaaaabbbbbcccccddddde');commit;

DB1执行结果:最多插入5个英文字符
在这里插入图片描述
DB2执行结果:最多插入10个英文字符
在这里插入图片描述
DB3执行结果:最多插入5个英文字符
在这里插入图片描述
DB4执行结果:最多插入20个英文字符
在这里插入图片描述

4 中文字符测试

SQL> create table t2(name varchar(5));
SQL> insert into t2 values('我');commit;
SQL> insert into t2 values('我爱');commit;
SQL> insert into t2 values('我爱吃');commit;
SQL> insert into t2 values('我爱吃武汉');commit;
SQL> insert into t2 values('我爱吃武汉热');commit;
SQL> insert into t2 values('我爱吃武汉热干');commit;

DB1结果:最多插入2个中文字符
在这里插入图片描述
DB2结果:最多插入5个中文字符
在这里插入图片描述
DB3结果:最多插入1个中文字符
在这里插入图片描述
DB4结果:最多插入6个中文字符
在这里插入图片描述

四、结论:

(1)GB18030中文占2各字符,UTF-8中文占3个字符;英文均只占一个字符。
(2)开启LENGTH_IN_CHAR后。如果字符集为GB18030,则varchar会自动扩充字节至2倍;如果字符集为UTF-8,则会自动扩充至最大长度的4倍。

社区地址:https://eco.dameng.com

点击阅读全文
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐