NULL Vs Blank一直有趣的问题现在让我有点疯狂。
我有两个代表两个表的ESQL / C结构。我要从中取出一排 光标中的一个表。使用此提取中的两个字段的值,我将检索 另一张桌子的一行。我知道第二次获取肯定会返回一行。
现在,第二个表可以有空值。空白,我的意思是像''这样的价值观。我卸货的时候 这些字符显示为'\'。但是在C程序中,我相信这些并没有得到提升。
或者,我无法查看这些值是否存在。假设我获取了中的值 char * value,
if(value [0] =='\ 0')或 if(value [0] =='')
不起作用。 gdb显示类似的东西 value =“\ 000”,''。但是我无法从C代码中验证这一点。
我通过管道分隔文件手动加载了表。为了插入空白,我输入了 | \ |。
任何人都可以让我知道我错在哪里。
答案 0 :(得分:2)
您应该使用联接来在一个操作中从两个表中收集数据。 DBMS非常擅长连接;当您在应用程序中手动加入时,通常会显着降低速度。
数据类型至关重要 - 在问题中未指明。
SQL类型
ESQL / C类型:
char
- 用于CHAR数据;用NUL'\ 0'终止符填充空白到空白。fixchar
- 用于CHAR数据;空白填充到全长,没有NUL'\ 0'终止符。varchar
- 对于VARCHAR数据;没空白填补。您还提到使用“\
”来加载数据。这是一个特殊的符号,用于零长度非空VARCHAR字段来指示该值;空字段表示卸载格式中的NULL值。 (在磁盘上,空的非空VARCHAR占用一个字节,长度为零的值为0x00; NULL VARCHAR占用两个字节,值为0x01 0x00,长度为1,NULL(或NUL)值。)
根据你所说的,你可能在第二个表中有空(但不是NULL)VARCHAR(n)值。这些应显示为字符串值,其中第一个字节在C代码中为NUL'\ 0' - 无论您使用哪种变量类型。 GDB的输出与此一致;第一个字节是'\ 0'(或'\ 000');其余的都无关紧要。
您可能想要查找指标变量;这些告诉您从DB中选择的特定值是否为NULL。
如果您仍有问题,请发布代码(最好是一个非常小的可编译程序,显示问题 - 最多50行左右;或代码的一小部分 - 比如20行左右)。
答案 1 :(得分:0)
在Informix-SE中,当我卸载具有NULL值的列的表时,卸载的列显示为带有两个管道符号“||”意味着该特定列没有值。