Oracle中null值和空字符串的坑

思考
今天在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错
在这里插入图片描述

--创建employees表
CREATE TABLE employees (
  id NUMBER,
  name VARCHAR2(100)  
);
--对表新增email列,添加约束默认空字符串并且非空
ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT ''  NOT NULL;

以上操作的预期是向employees表中添加数据,email不添加数据的时候默认是空字符串,但实际上无法添加成功。

在MySQL数据库中

--创建表employees
CREATE TABLE employees(
id int,   
name VARCHAR(100)   
);
--添加字段email,并添加约束
ALTER TABLE employees ADD email VARCHAR(100) DEFAULT ''  NOT NULL;

向表中添加数据

--emial字段没有添加,默认为空字符串,不是null
INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');
--email添加一个值
INSERT INTO employees  VALUES (3,'Jhon','123@qq.com');
--查询结果
mysql> SELECT  *  FROM  employees;
+------+------+------------+
| id   | name | email      |
+------+------+------------+
|    1 | TOM  |            |
|    2 | Carl |            |
|    3 | Jhon | 123@qq.com |
+------+------+------------+
3 rows in set (0.00 sec)

在MySQL数据库中符合预期,email字段有数值时,是实际的数值,相反是默认的值

修改约束

ALTER TABLE employees modify email VARCHAR(100);

添加数据

INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');

查看结果

mysql> SELECT  *  FROM  employees;
+------+------+-------+
| id   | name | email |
+------+------+-------+
|    1 | TOM  | NULL  |
|    2 | Carl |       |
+------+------+-------+
2 rows in set (0.00 sec)

MySQL中空字符串就是空字符串,空值就是NULL

在Oracle数据库中

--创建表
CREATE TABLE employees (
id NUMBER,
name VARCHAR2(100)  
);
--新增email字段,添加约束
ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT ''  NOT NULL;

向表中添加数据报错

INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');

在这里插入图片描述
修改约束

--修改email的约束,改成可以添加空值
ALTER TABLE employees MODIFY email varchar2(100) ;
--插入数据
INSERT INTO employees (id,name,email) VALUES (1,'TOM','');  --添加空字符串
INSERT INTO employees  VALUES (2,'Carl',null);

查询结果,结果都是null
在这里插入图片描述
原因是因为在Oracle中,将长度为零的字符值视为NULL

相关推荐

  1. MySQLNULL

    2023-12-27 08:38:01       53 阅读
  2. mysql null区别

    2023-12-27 08:38:01       42 阅读
  3. List 删除 null

    2023-12-27 08:38:01       64 阅读
  4. OracleNull‘‘区别

    2023-12-27 08:38:01       65 阅读
  5. MySQLNULL区别是什么?底层原理是什么?

    2023-12-27 08:38:01       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 08:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 08:38:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 08:38:01       82 阅读
  4. Python语言-面向对象

    2023-12-27 08:38:01       91 阅读

热门阅读

  1. 【数据库】postgressql设置数据库执行超时时间

    2023-12-27 08:38:01       61 阅读
  2. 黑客常用端口利用总结

    2023-12-27 08:38:01       42 阅读
  3. python之列表动态生成和重复数据处理

    2023-12-27 08:38:01       60 阅读
  4. VSCode 加Cortex-Debug嵌入式调试方法

    2023-12-27 08:38:01       53 阅读
  5. codeforces 1904B

    2023-12-27 08:38:01       58 阅读
  6. 单例模式你了解嘛?

    2023-12-27 08:38:01       51 阅读
  7. Mac_通过chmod处理文件权限

    2023-12-27 08:38:01       44 阅读
  8. 处理go中clientv3连接etcd包异常

    2023-12-27 08:38:01       55 阅读
  9. AWS的EC2之间ping不通,服务之间不通,怎么办

    2023-12-27 08:38:01       49 阅读
  10. 2023-全国智能驾驶测试赛-车联网安全专项赛WP (Re)

    2023-12-27 08:38:01       44 阅读
  11. python 读取pdf中的文本

    2023-12-27 08:38:01       48 阅读