1. 程式人生 > >資料庫中的空值與NULL的區別以及python中的NaN和None

資料庫中的空值與NULL的區別以及python中的NaN和None

資料庫裡面的”空值”有兩種:空字元(“”)、空值(NULL)。
兩種儲存方式在資料庫中都很常見,實際中根據業務或者個人習慣可以用這兩種方式來儲存“空值”。那這兩種到底有什麼區別,下面通過例子直接來展示:

-- 建立表test
create 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;

1

select count(date),count(class) from test;

2

看到這裡應該明白了,直觀看空字元和NULL的區別在於,在做count計算的時候,空字元也會被計算在裡面,而NULL不會。有些同學在使用where is null 和is not null 的時候也要注意資料庫中的“空值”是空字元還是NULL。不然統計結果可能並不是你想要的。

平時有些資料是需要藉助python 來處理的,我們來看看python獲取資料的時候有哪些需要注意的。
python有兩種方式獲取資料:
1. 一種是把資料從MYSQL 中匯出到txt或者csv,然後本地讀取;
2. 另一種是python直接連結資料庫,讀取資料;
先看第一種:匯出到csv,python 讀取

3
第二種:
4

兩種方式讀取的資料居然不一樣!

  1. 第一種把資料從MYSQL匯出後,python讀取時,空值即為NULL;
  2. 第二種連結資料庫後,python能讀取表結構,資料庫的NULL對應列表中的None以及pandas中的NaN(如果欄位型別是時間,則為NaT)。而資料庫中的空字元,則被識別為空字元。

個人理解的等式

  • NULL(資料庫)=None(python列表)=NaN(pandas)
  • 空字元(資料庫)=空字元(python列表)=空字元(pandas)
  • 從csv中獲取資料時:空值(csv)=NULL(資料庫)=NaN(pandas)
  • 轉為csv資料時:資料庫中的NULL\空字元和pandas中的NaN\空字元,都變成csv中的空值

在python處理完資料後,往資料庫寫資料的時候也一樣。注意注意!

如果對python中的None和NaN有疑問,可以看這位博主的 博文

相關推薦

Python NaN None 的詳細比較

python原生的None和pandas, numpy中的numpy.NaN儘管在功能上都是用來標示空缺資料。但它們的行為在很多場景下確有一些相當大的差異。由於不熟悉這些差異,曾經給我的工作帶來過不少麻煩。 特此整理了一份詳細的實驗,比較None和NaN在不同場景下的差異。 實

資料庫的空NULL區別以及pythonNaNNone

資料庫裡面的”空值”有兩種:空字元(“”)、空值(NULL)。 兩種儲存方式在資料庫中都很常見,實際中根據業務或者個人習慣可以用這兩種方式來儲存“空值”。那這兩種到底有什麼區別,下面通過例子直接來展示: -- 建立表test create table `

mysql刪除欄位為空的資料 mysql中空NULL區別

空值與NULL的區別   我們先來理解mysql中空值與NULL的區別是什麼吧   一些剛剛接觸MySQL的孩子,經常會錯誤的認為NULL與空字串’ ’是相同的。這看似是一件不重要的事情,但是在MySQL中,這兩者是完全不同的。NULL是指沒有值,而”則表示值是存在的,

mysql的空NULL區別

Mysql資料庫是一個基於結構化資料的開源資料庫。SQL語句是MySQL資料庫中核心語言。不過在MySQL資料庫中執行SQL語句,需要小心兩個陷阱。   陷阱一:空值不一定為空   空值是一個比較特殊的欄位。在MySQL資料庫中,在不同的情形下,空值往往代表不同的含義

Java空字串null區別

非本人 :    轉載於:http://www.cnblogs.com/candle806/archive/2013/01/17/2864917.html     -------如有侵權  請聯絡我 我會進行刪除

pythondefaultdictdict的區別使用

預設值可以很方便 眾所周知,在Python中如果訪問字典中不存在的鍵,會引發KeyError異常(JavaScript中如果物件中不存在某個屬性,則返回undefined)。但是有時候,字典中的每個鍵都存在預設值是非常方便的。例如下面的例子: strings =

python的==is的使用(中文字串英文字串有區別

1.python中的==比較的是物件的值,而非物件本身,例:(這裡比較了數字、英文字串、中文字串、表) 從這看出==比較的只是值,而非物件本身 2.python中的is和is not判斷是否為同一物件(其實是根據內建函式id取得物件的唯一標識去判斷的),例:

actionservlet區別以及action瞭解

servlet生命週期為init    service    destroy,servlet是單例模式,注意執行緒安全問題,屬性資料(成員變數)是全域性變數,web.xml配置繁瑣,servlet的轉向方法 if(method.equals("aa")){ 轉向頁面;

pythonrangexrange的用法區別

 range 函式說明:range(x,y,z),根據x與y的值指定的範圍以及z設定的步長,生成一個序列。 range示例: >>> range(5) #代表從0開始長度為5 [0, 1, 2, 3, 4] >>> range(1,5

iOS-MRCARC區別以及五大記憶體區

個人覺得要更加深入直觀瞭解MRC與ARC的區別建議先從記憶體分析開始所以文章開始會從記憶體起 文章目錄 1.五大記憶體區域 1.1 棧區 1.2 堆區 1.3 全域性區 1.4 常量區 1.5 程式碼區 1.6 自由儲存區 1.7 stat

藍芽、紅外線wifi 區別以及不同頻段無線電磁波的穿牆繞過障礙物能力(轉)

電磁波按波長由大到小的順序為:無線電波、紅外線、可見光、紫外線、X射線、γ射線 以下是幾種常見的電磁波交流電:波長可達數千公里 (如果需要,還可以製造出波長更長的.總之理論上 無上限)  無線電波:長波(波長在幾公里至幾十公里);中波(波長約在3公里至約50米);短波(波

jquery .attr("value") .val() 區別 以及siblings()用法

.val() 能夠取到 針對text,hidden可輸入的文字框的value值。 而 .attr('value') 可以取到html元素中所設定的屬性 value的值,不能獲取動態的如input type="text" 的文字框手動輸入的值。 siblings()用法

909422229__MysqlOracle區別以及悲觀鎖樂觀鎖機制

1.Mysql與Oracle的區別: 事務: oracle很早就完全支援事務。 mysql在innodb儲存引擎的行級鎖的情況下才支援事務,在安裝Mysql的時候可以選擇是否支援事務,可支援,可不支

【C】C99C89區別以及轉換方法

DATE: 2018.11.14 1、 C99與C89區別: 可變長陣列   C99中,程式設計師宣告陣列時,陣列的維數可以由任一有效的整型表示式確定,包括只在執行時才能確定其值的表示式,這類陣列就叫做可變長陣列,但是隻有區域性陣列才可以是變長的. 可變長陣

Java進階(二十一)java 空字串null區別

java 空字串與null區別1、型別      null表示的是一個物件的值,而並不是一個字串。例如宣告一個物件的引用,String a = null ;      ""表示的是一個空字串,也就是說它的長度為0。例如宣告一個字串String str = "" ;2、記憶體分

[Hive]Hive使用指南七 空NULL

1. NULL(null)值建立一個臨時表tmp_null_empty_test,並插入一些NULL資料:CREATE TABLE IF NOT EXISTS tmp_null_empty_test( uid string)ROW FORMAT DELIMITEDFIEL

Python列表字典的區別以及適用的場景

從應用場景來說: list 是記錄簡單有序資料的,就是一對一的那種,可以理解為一維陣列. 比如你記錄貓的名字,就可以用list = ['第1只貓名字','第2只貓名字'] ... 比如你記錄飯店的菜品,就可以用list = ['第1個菜紅燒肉','第2個菜紅燒大腸',第3個菜'紅燒排骨'] ... 這裡的記

區別,以及runat="server"的作用

<input type="button">與<asp:button>的區別,以及runat="server"的作用 在<input type="button">中只能編寫點選事件onclick,並且只能在js中實現,那麼如何讓<in

Pythoncopydeepcopy的區別以及程式設計實現deepcopy的功能

在python中,有淺複製copy()和深度複製deepcopy(),這兩個的區別我用以下的例子來說明,例如:numlist=[[1,2,[3,4,5]],34,"haha",{"name":{"fistname":"孫","lastName":"悟空"}}]設  numl

MyBatis面試題,'#{}${}的區別'以及'sql預編譯'

這個問題不算複雜,網上答案也比較”豐富”, 之所以寫這篇博文主要是以後查閱方便,自己總結也能加深印象, 畢竟它是面試題中的老相識,以後還要麻煩它關照關照… MyBatis本身是基於JDBC封