对于DB2的字符型字段,NULL与空串(即’\0′)的概念不同,在开发中要区分对待。
1、在建表时,如果不附加任何约束,那么CHAR型字段可以存储任何合法字符及NULL。
插入x’00′: 可以
插入NULL: 可以
INSERT默认值: NULL
2、NOT NULL约束
插入x’00′: 可以
插入NULL: 失败
INSERT默认值: INSERT失败
3、NOT NULL WITH DEFAULT约束
插入x’00′: 可以
插入NULL: 失败
INSERT默认值: 默认为空格,可指定其他字符,甚至是x’00′
例如 NOT NULL WITH DEFAULT ’4′
NOT NULL WITH DEFAULT x’00′
以SQC方式查询一个值为NULL的字符型字段,可能会引发-305错误。日常应用中习惯以NOT NULL WITH DEFAULT约束建表,该约束只保证字段值非NULL,但可能是任何其他值,包括’\0′。
命令行不容易区分空格、空串、NULL以及’-',可以使用ASCII()或HEX()内建函数来区分:
空串 正常显示: hex():00
空格 正常显示: hex():20
NULL 正常显示:- hex():-
‘-’ 正常显示:- hex(): 2D
但是设置了oracle的兼容性之后,现没有空字符串一说,会把''当null来对待!不知道是在兼容性的哪一级设置的?
16进制值
兼容特性
描述
1 (0x01)
ROWNUM
支持ROWNUM出现在WHERE字句中
2 (0x02)
DUAL
支持DUAL表
3 (0x04)
Outer join operator
支持外连接操作符(+)
4 (0x08)
Hierarchical queries
支持使用CONNECT BY的嵌套查询
5 (0x10)
NUMBER data type
支持NUMBER数据类型
6 (0x20)
VARCHAR2 data type
支持VARCHAR2数据类型
7 (0x40)
DATE data type
支持DATE和TIMESTAMP组合使用
8 (0x80)
TRUNCATE TABLE
支持TURNCATE TABLE语句
9 (0x100)
Character literals
支持CHAR和GRAPHIC
数据类型的赋值操作
10 (0x200)
Collection methods
支持集合方法,例如对ARRAY的first、
last、next和previous方法
11 (0x400)
Data dictionary-compatible views
支持创建数据字典兼容特性视图
12 (0x800)
PL/SQL compilation
支持PL/SQL语言