stephen
作者stephen·2011-01-12 17:35
系统工程师·

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 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广