系统工程师
·Informix中char字段的一些特殊值
字数 965阅读 1948评论 0赞 0
char字段有三个特殊值:长度为零的字符串、长度为1值为空格的字符串、NULL
为了后面我们看数据方便,我们这样建立一个表:
create table t5(name char(5), num int);
然后我们往这个表里插入五行数据:
insert into t5 values('BAC', 33);
insert into t5 values('BAD', 34);
insert into t5 values('', 35); --name是长度为零的字符串
insert into t5 values(' ', 36); --name是长度为1值为空格的字符串
insert into t5(num) values (37); --name是NULL
在Informix数据库里,这五行数据被存储为:
42 41 43 20 20 00 00 00 21
42 41 44 20 20 00 00 00 22
20 20 20 20 20 00 00 00 23
20 20 20 20 20 00 00 00 24
00 20 20 20 20 00 00 00 25
在存储中,数据是十六进制的。
例如对于第一行:
42 41 43 表示BAC
21 表示33
Informix在初始化name字段时,把name字段初始化为 2020202020 (空格对应的十六进制编码为20)
如果插入BAC,name字段将变成4241432020
如果插入BAD,name字段将变成4241442020
如果插入“长度为零的字符串”,name字段将变为2020202020
如果插入“长度为1值为空格的字符串”,由于空格对应的十六进制编码为20,值为空格,意味着值为20,所以name字段将变为2020202020
如果插入NULL,name字段将变为0020202020
所以对于char(5),插入"长度为零的字符串"和插入"长度为1值为空格的字符串",结果是一样的。
如果我们运行如下的SQL语句:
select distinct name from t5;
将返回4行。
如果我们运行如下的SQL语句:
select distinct length(name) from t5;
将返回3行。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论