-- 建立表testcreate table `test` (`id` int not null ,`name` varchar(255) null ,`date` timestamp null ,`class` varchar(255) null );insert into test (id,name,date,class) values (1,"張三","2017-03-01","a班");insert into test (id,name,date,class) values (2,"李四","2017-03-02","");insert into test (id,name,class) values (3,"王五","c班");select * from test;1234567891011
select count(date),count(class) from test;1
看到這裡應該明白了,直觀看空字元和NULL的區別在於,在做count計算的時候,空字元也會被計算在裡面,而NULL不會。有些同學在使用where is null 和is not null 的時候也要注意資料庫中的“空值”是空字元還是NULL。不然統計結果可能並不是你想要的。
資料庫裡面的”空值”有兩種:空字元(“”)、空值(NULL)。
兩種儲存方式在資料庫中都很常見,實際中根據業務或者個人習慣可以用這兩種方式來儲存“空值”。那這兩種到底有什麼區別,下面透過例子直接來展示:
-- 建立表testcreate table `test` (`id` int not null ,`name` varchar(255) null ,`date` timestamp null ,`class` varchar(255) null );insert into test (id,name,date,class) values (1,"張三","2017-03-01","a班");insert into test (id,name,date,class) values (2,"李四","2017-03-02","");insert into test (id,name,class) values (3,"王五","c班");select * from test;1234567891011
select count(date),count(class) from test;1
看到這裡應該明白了,直觀看空字元和NULL的區別在於,在做count計算的時候,空字元也會被計算在裡面,而NULL不會。有些同學在使用where is null 和is not null 的時候也要注意資料庫中的“空值”是空字元還是NULL。不然統計結果可能並不是你想要的。
平時有些資料是需要藉助python 來處理的,我們來看看python獲取資料的時候有哪些需要注意的。
python有兩種方式獲取資料:
1. 一種是把資料從MYSQL 中匯出到txt或者csv,然後本地讀取;
2. 另一種是python直接連結資料庫,讀取資料;
先看第一種:匯出到csv,python 讀取
第二種:
兩種方式讀取的資料居然不一樣!
第一種把資料從MYSQL匯出後,python讀取時,空值即為NULL;
第二種連結資料庫後,python能讀取表結構,資料庫的NULL對應列表中的None以及pandas中的NaN(如果欄位型別是時間,則為NaT)。而資料庫中的空字元,則被識別為空字元。
個人理解的等式
NULL(資料庫)=None(python列表)=NaN(pandas)
空字元(資料庫)=空字元(python列表)=空字元(pandas)
從csv中獲取資料時:空值(csv)=NULL(資料庫)=NaN(pandas)
轉為csv資料時:資料庫中的NULL\空字元和pandas中的NaN\空字元,都變成csv中的空值
在python處理完資料後,往資料庫寫資料的時候也一樣。注意注意!