内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
最近系统运行中发现Access 2003 版本中对待 Null 和 ‘’ (空字符)奇怪问题,重现步骤:
1、创建表tabTest ;
2、使用设计视图添加两个字段 ID ,col1
名称 |
类型 |
长度 |
说明 |
|
ID |
Number |
|
|
主键,自增 |
Col1 |
char |
1 |
无 |
|
3、使用sql 添加如下数据
-- col1 字段设置为 null INSERTINTO tabtest (id, col1) VALUES(1, NULL); |
-- col1 字段设置为 ‘’ INSERTINTO tabtest (id, col1) VALUES(2, ''); |
-- col1 字段设置为 ‘a’ INSERTINTO tabtest (id, col1) VALUES(3, 'a'); |
4、重新建立查询请求,通过 sql 添加新字段 col2
-- 添加新列col2 ALTERTABLE tabTest ADDCOLUMN col2 CHAR(1); |
5、使用如下sql 再次向 tabTest 添加新数据
-- col1,col2 字段设置为 null INSERTINTO tabtest(id, col1, col2) VALUES(4, NULL, NULL); |
-- col1,col2 字段设置为 ‘’ INSERTINTO tabtest(id, col1, col2) VALUES(5, '', ''); |
-- col1,col2 字段设置为 ‘a’ INSERTINTO tabtest(id, col1, col2) VALUES(6, 'a', 'a'); |
6、打开 tabTest 检查 Id 为 5 的数据。神奇的事情发生了。
col1 字段为长度为0 的空字符串,而 col2 为长度为1 的字符
问题:
Q1、为何 ID 为 2 的col1 字段和 col2 字段都是长度为 0 的空字符,
而 ID 为 5 的col1 字段和 col2 字段长度分别为 0, 1 的空字符,
运行如下sql 得到如下结果:
SELECTid, len(col1) AS col1_长度, len(col2) AS col2_长度 FROM tabtest WHEREidIN (2, 5); |
Q2、通过如下sql 却能得到ID 为5 的记录
SELECT * FROM tabtest WHERE col1 = '' AND col2 = ''; |