Oracle中null值和空字符串的坑及解決
更新時間:2024年08月26日 09:53:00 作者:草莓田田圈~
這篇文章主要介紹了Oracle中null值和空字符串的坑及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
思考
在學習oracle數據庫的過程中,發(fā)現當對字段進行約束,默認空字符串時,出現報錯
--創(chuàng)建employees表 CREATE TABLE employees ( id NUMBER, name VARCHAR2(100) ); --對表新增email列,添加約束默認空字符串并且非空 ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT '' NOT NULL;
以上操作的預期是向employees表中添加數據,email不添加數據的時候默認是空字符串,但實際上無法添加成功。
在MySQL數據庫中
--創(chuàng)建表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數據庫中
--創(chuàng)建表 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
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。