开发者

Oracle中null值和空字符串的坑及解决

目录
  • 思考
  • 在mysql数据库中
  • 在oracle数据库中
  • 总结

思考

在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错

Oracle中null值和空字符串的坑及解决

--创建employees表
CREATE TABLE employees (
  id NUMBER,
  name VARphpCHAR2(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.cjsom |
+------+------+------------+
3 rows in set (0.00 sec)

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

  • 修改约束
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 ewww.devze.commail VARCHAR2(100) DEFAULT ''  NOT NULL;
  • 向表中添加数据报错
INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');

Oracle中null值和空字符串的坑及解决

  • 修改约束
--修改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值和空字符串的坑及解决

原因是因为在Oracle中,将长度为零的字符值视为NULL

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新数据库

数据库排行榜