Access 2003 中 null 和 '' 空字符串的奇怪问题

最近系统运行中发现Access 2003 版本中对待 Null 和 ‘’ (空字符)奇怪问题,重现步骤:

1、创建表tabTest ;

2、使用设计视图添加两个字段 ID ,col1


名称


类型


长度


说明


ID


Number


 


 


主键,自增


Col1


char


1


         

 

3、使用sql 添加如下数据


-- col1 字段设置为 null

INSERT INTO tabtest (id, col1) VALUES(1, NULL);


-- col1 字段设置为 ‘’

INSERT INTO tabtest (id, col1) VALUES(2, '');


-- col1 字段设置为 ‘a’

INSERT INTO tabtest (id, col1) VALUES(3, 'a');

 

4、重新建立查询请求,通过 sql 添加新字段 col2


-- 添加新列col2

ALTER TABLE tabTest ADD COLUMN col2 CHAR(1);

 

5、使用如下sql 再次向 tabTest 添加新数据


-- col1col2 字段设置为 null

INSERT INTO tabtest(id, col1, col2) VALUES(4, NULL, NULL);


-- col1col2 字段设置为 ‘’

INSERT INTO tabtest(id, col1, col2) VALUES(5, '', '');    


-- col1col2 字段设置为 ‘a’

INSERT INTO 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 得到如下结果:


SELECT id, len(col1) AS col1_长度, len(col2) AS col2_长度

  FROM tabtest

 WHERE id IN (2, 5);

 

 

Q2、通过如下sql 却能得到ID 5 的记录


SELECT *

  FROM tabtest

 WHERE col1 = ''

   AND col2 = '';

 

 

 

 

时间: 2024-08-03 14:08:22

Access 2003 中 null 和 '' 空字符串的奇怪问题的相关文章

MySQL中NULL与空字符串 空格问题

  一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串' '是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而''则表示值是存在的,只不过是个空值.. 这就相当于厂子给职工分房子,一共只有一套,老张和老李都想要,可是经理告诉老张,下次有您的房子,可是老李压根就没人搭理他.所以老张的房子是"空"的,因为这是空白支票,不过毕竟经理张口了,而老李的房子就是NULL的,因为根本就没有人考虑过他. 二者的区别不大,但是如果不仔细的话可

Access 2003 中 null 和 '' 空字符串的奇怪问题

  国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.        ----------------------------------------------------------------------

MYsql中NULL与空字符串空区别详解

对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL与MySQL空字符串是相同的事.情况并非如此.例如,下述语句是完全不同的:MySQL> INSERT INTO my_table (phone) VALUES (NULL);  代码如下 复制代码 mysql> INSERT INTO my_table (phone) VALUES ('');   这两条语句均会将值插入phone(电话)列,但第1条语句插入的是NULL值,第2条语句插入的是空字符串.第1种情况的含义可被解释为

php setcookie时值为null或空字符串(删除cookie)

长久以来,在php中删除cookie的时候,都是使用 bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) $value 随便写, $expire设置为一个已经过去的时间即可. 官方文档中也是这样写的: http://www.php.n

php setcookie值为null或空字符串删除cookie解析

官方文档中也是这样写的: #2 setcookie() delete example  代码如下 复制代码 <?php // set the expiration date to one hour ago setcookie ("TestCookie", "", time() - 3600); setcookie ("TestCookie", "", time() - 3600, "/~rasmus/"

access 2003中批量修改字段实例

  虽然现在由于数据存储量,数据处理速度上的需要,access已渐渐退出了关系型数据库的家族,但对于尤其是国内的很多学校及边远机房的系统还有部分是使用access 2003的,今天也一个数据库表修改的需要,重温了这个知识. 要使用Access 2003以上的版本, 现在是需要把表NC_FlashList中的title字段里的"小游戏下载"全部改成"在线小游戏".操作如下: 打开数据库后,查询--->在设计视图中创建查询, 然后关闭弹出的窗口,在空白处右键,选择

恢复从 Access 2000、 Access 2002 或 Access 2003 中数据库删除表的方法_Access

 注意 : 本文示例代码使用 Microsoft 数据访问对象. 为此代码才能正常运行, 您必须引用 Microsoft DAO 3.6 对象库. 可以进行, 单击  工具  菜单中 VisualBasic 编辑器, 上  引用  并确保选中  Microsoft DAO 3.6 对象库  复选框. 1.    在 MicrosoftAccess 中打开数据库. 2.    在数据库窗口, 单击下 对象 , 模块 , 然后单击 新建 . 3.    键入或粘贴以下代码, 您只有创建模块中:  复

Oracle数据库中对null值的排序及mull与空字符串的区别_oracle

order by排序之null值处理方法在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为null是最大值,所以如果是ASC升序则被排在最后,而DESC降序则排在最前.所以,为何分析数据的直观性方便性,我们需要对null的记录值进行相应处理. 这是四种oracle排序中NULL值处理的方法:1.使用nvl函数语法:Nvl(expr1, expr2)     若EXPR1是NULL,則返回

android-数据库中的空字符串

问题描述 数据库中的空字符串 在SQL数据库中的表: CREATE TABLE Book(_id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL) 在代码运行后,没有指定的异常出现: ContentValues args = new ContentValues(); args.put("Name", ""); long id = db.insertOrThrow("Book", null