zoukankan      html  css  js  c++  java
  • Access 错了,还是我傻了

    最近系统运行中发现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 = '';

     

     

  • 相关阅读:
    紫外传感器波长
    常见设备功耗
    点型感温火灾探测器研发思路
    C#使用Linq to XML进行XPath查询
    题解 最大获利
    题解 走迷宫
    2020-11-16 考试题解
    题解 最小生成树
    题解 「BZOJ4919 Lydsy1706月赛」大根堆
    题解 2020.10.24 考试 T4 模板
  • 原文地址:https://www.cnblogs.com/AloneSword/p/2237515.html
Copyright © 2011-2022 走看看