Oracle中null值和空字符串的坑及解決
思考
在學(xué)習(xí)oracle數(shù)據(jù)庫(kù)的過(guò)程中,發(fā)現(xiàn)當(dāng)對(duì)字段進(jìn)行約束,默認(rèn)空字符串時(shí),出現(xiàn)報(bào)錯(cuò)

--創(chuàng)建employees表 CREATE TABLE employees ( id NUMBER, name VARCHAR2(100) ); --對(duì)表新增email列,添加約束默認(rèn)空字符串并且非空 ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT '' NOT NULL;
以上操作的預(yù)期是向employees表中添加數(shù)據(jù),email不添加數(shù)據(jù)的時(shí)候默認(rèn)是空字符串,但實(shí)際上無(wú)法添加成功。
在MySQL數(shù)據(jù)庫(kù)中
--創(chuàng)建表employees CREATE TABLE employees( id int, name VARCHAR(100) ); --添加字段email,并添加約束 ALTER TABLE employees ADD email VARCHAR(100) DEFAULT '' NOT NULL;
- 向表中添加數(shù)據(jù)
--emial字段沒(méi)有添加,默認(rèn)為空字符串,不是null INSERT INTO employees (id,name) VALUES (1,'TOM'); INSERT INTO employees VALUES (2,'Carl',''); --email添加一個(gè)值 INSERT INTO employees VALUES (3,'Jhon','123@qq.com'); --查詢結(jié)果 mysql> SELECT * FROM employees; +------+------+------------+ | id | name | email | +------+------+------------+ | 1 | TOM | | | 2 | Carl | | | 3 | Jhon | 123@qq.com | +------+------+------------+ 3 rows in set (0.00 sec)
在MySQL數(shù)據(jù)庫(kù)中符合預(yù)期,email字段有數(shù)值時(shí),是實(shí)際的數(shù)值,相反是默認(rèn)的值。
- 修改約束
ALTER TABLE employees modify email VARCHAR(100);
- 添加數(shù)據(jù)
INSERT INTO employees (id,name) VALUES (1,'TOM'); INSERT INTO employees VALUES (2,'Carl','');
- 查看結(jié)果
mysql> SELECT * FROM employees; +------+------+-------+ | id | name | email | +------+------+-------+ | 1 | TOM | NULL | | 2 | Carl | | +------+------+-------+ 2 rows in set (0.00 sec)
MySQL中空字符串就是空字符串,空值就是NULL
在Oracle數(shù)據(jù)庫(kù)中
--創(chuàng)建表 CREATE TABLE employees ( id NUMBER, name VARCHAR2(100) ); --新增email字段,添加約束 ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT '' NOT NULL;
- 向表中添加數(shù)據(jù)報(bào)錯(cuò)
INSERT INTO employees (id,name) VALUES (1,'TOM'); INSERT INTO employees VALUES (2,'Carl','');

- 修改約束
--修改email的約束,改成可以添加空值 ALTER TABLE employees MODIFY email varchar2(100) ; --插入數(shù)據(jù) INSERT INTO employees (id,name,email) VALUES (1,'TOM',''); --添加空字符串 INSERT INTO employees VALUES (2,'Carl',null);
查詢結(jié)果,結(jié)果都是null

原因是因?yàn)樵贠racle中,將長(zhǎng)度為零的字符值視為NULL
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle?Temp表空間不足問(wèn)題的多種解決方案
在Oracle數(shù)據(jù)庫(kù)中臨時(shí)表空間(Temp Tablespace)是用于存儲(chǔ)排序、哈希連接和并行查詢等操作中間結(jié)果的關(guān)鍵結(jié)構(gòu),這篇文章主要介紹了Oracle?Temp表空間不足問(wèn)題的多種解決方案,需要的朋友可以參考下2025-11-11
Oracle數(shù)據(jù)庫(kù)中的優(yōu)化方法
這篇文章主要給大家介紹了Oracle數(shù)據(jù)庫(kù)中的優(yōu)化方法,Oracle數(shù)據(jù)庫(kù)是當(dāng)前應(yīng)用最廣泛的大型數(shù)據(jù)庫(kù)之一,其系統(tǒng)結(jié)構(gòu)復(fù)雜,性能受多方面因素影響,其中查詢操作是影響其性能的關(guān)鍵因素,需要的朋友可以參考下2023-07-07
解決ORA-12154 TNS無(wú)法解析指定的連接標(biāo)識(shí)符問(wèn)題
Oracle11g server 64bit服務(wù)器端安裝在Windows Server2008 Enterprise上,安裝Oracle11g client 32bit,通過(guò)SQL Plus以sysdba身份連接數(shù)據(jù)庫(kù),并且創(chuàng)建表空間、用戶、授權(quán)成功,在連接數(shù)據(jù)庫(kù)時(shí)出現(xiàn)問(wèn)題,下面講解ORA-12154無(wú)法解析指定的連接標(biāo)識(shí)符問(wèn)題,感興趣的朋友一起看看2024-01-01
Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù)
這篇文章主要介紹了Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07
Oracle 臨時(shí)表空間SQL語(yǔ)句的實(shí)現(xiàn)
臨時(shí)表空間用來(lái)管理數(shù)據(jù)庫(kù)排序操作以及用于存儲(chǔ)臨時(shí)表、中間排序結(jié)果等臨時(shí)對(duì)象,本文主要介紹了Oracle 臨時(shí)表空間SQL語(yǔ)句的實(shí)現(xiàn),感興趣的可以了解一下2021-09-09
使用oracle發(fā)生標(biāo)識(shí)符無(wú)效問(wèn)題及解決
這篇文章主要介紹了使用oracle發(fā)生標(biāo)識(shí)符無(wú)效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Linux虛擬機(jī)下安裝Oracle 11G教程圖文解說(shuō)
這篇文章主要介紹了Linux虛擬機(jī)下安裝Oracle 11G教程圖文詳解,本文文字圖解相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
oracle正則表達(dá)式regexp_like的用法詳解
本篇文章是對(duì)oracle正則表達(dá)式regexp_like的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

