- 论坛徽章:
- 0
|
原帖由 xxyyy 于 2008-7-9 11:53 发表 ![]()
这是unload程序本身的bug
unload的时候空串应该是|\|,空值是||。
但是你的unload的时候空串也弄成||了,所以load的时候解释成空值了,所以出错。
在低版本的informix有这个bug,高版本已经修正了,解决 ...
你这个说法是有问题的。
“空串”这个定义你误解了。
如果一个字段里面包含了null,unload肯定是||(连续的竖线),而绝对不会如你所说|\|,这个格式是什么?
这个格式说明该字段至少包含了一个字符,该字符是"|"(分隔符本身)。
至于2楼的测试
insert into x-table values ('a', 'b', '', 'c');
在informix里面,这是个障眼法。informix的client工具,对于literal的空串,自动的解释成至少一个空白字符的串。
informix的逻辑是,程序员知道自己想干什么。如果想插入空值,程序员一定会用null,如果已经写成了'',表明程序员
不想插入空值!
实际上,你可以用如下进行测试:
insert into x-table values ('my-key', 'b', '', 'd');
select * from x-table where c = ' ';
select * from x-table where c = '';
select * from x-table where c = ' ';
看到了么? 实际上,你写的c=后面的字串,不管多长都可以,只要你愿意,也不管多短,都是一样的。想想看? 到底是为什么?
实际上,你要是用esql/c来书写。比如
c_col[0] = 0x00; // 当然你也可以写 strcpy (c_col, ""); 都是一样的
insert into x-table values ('my-key', 'b', :c_col, 'd');
这时候,如果c字段是主键的一部分,该insert语句会报错。应该是违反了非空约束。
我说明白了么? |
|