1. 程式人生 > >mysql中null與‘’的區別

mysql中null與‘’的區別

Mysql中空字元<''>和空值的區別,一直都知道mysql中空字串(”)和空值(null)之間有區別,但是沒好好研究過。直到專案上,這兩個概念被我搞混了之後才想起來研究一下。
根據網上的說法,空字串(”)是不佔用空間,而空值(null)是佔用空間。(這裡我不太明白,因為我的理解是,字串都會有一個結束符,這個結束符不會佔用空間嗎??)。
雖然有不明白的地方,但是不影響這篇文章對這兩個值的分析。
為了分析區別,這裡新建一張表 test_null,並插入4行資料。

?

1

2

3

4

5

CREATE TABLE test_null (

id int,

value_1 varchar(128),

value_2 varchar(128) not null

)


這裡需要說一下,將欄位設定為 not null之後是可以插入空字元(”)的。影響的只是不能插入空值(null)。
首先比較一下,空字元(”)和空值(null)查詢方式的不同。


由此可見,null 和 ”的查詢方式不同。而且比較字元 ‘=’’>’ ‘<’ ‘<>’是不能用於查詢null。如果需要查詢空值(null),需使用is null 和is not null。
第二種比較,參與運算。


由此可見,空值(null)是不能參與任何計算,因為空值參與任何計算都為空。所以,當程式業務中存在計算的時候,需要特別注意。如果非要參與計算,需使用ifnull函式,將null轉換為”才能正常計算。
第三種比較,統計數量



由此可見,當統計數量的時候。空值(null)並不會被當成有效值去統計。同理,sum()求和的時候,null也不會被統計進來,這樣就能理解,為什麼null計算的時候結果為空,而sum()求和的時候結果正常了。
以上對比,算得上是程式中經常會遇到但又不容易注意的問題。
網路上,針對這兩個值。有一種說法會比較好理解。在存電話號碼欄位中,空值(null)代表你沒有電話,而空字串(”)則代表,你有電話但是沒有填寫。或者理解,填寫了又刪除掉。
還有一種理解方式。null是尚未定義的值,表示未知。而”,確定為一個空字串。所以未知的值,無法進行各種比較(大於,小於,等於),也不能用於計算(加減乘除)。
我的理解是,不考慮是否佔用記憶體。null代表什麼都沒有,”代表的就是一個空白的字串。所以,null什麼都沒有就不能用於比較。
無論怎麼理解,都需要記住這兩個值的區別。避免在專案中碰到錯誤。

相關推薦

mysqlnullnot null區別及效率

<span style="font-family: 宋體; background-color: rgb(255, 255, 255);">經常用mysql的人可能會遇到下面幾種情況:</span> 1、我欄位型別是not null,為什麼我可以插入空值 2、為什麼not

mysqlnull‘’的區別

Mysql中空字元<''>和空值的區別,一直都知道mysql中空字串(”)和空值(null)之間有區別,但是沒好好研究過。直到專案上,這兩個概念被我搞混了之後才想起來研究一下。 根據網上的說法,空字串(”)是不佔用空間,而空值(null)是佔用空間。(這裡我不太明

mysqlNull 空值的區別

mysql中null確實很難纏,往往很多高手在sql優化時都被它坑過,下面總結了他們的區別: MySQL中,null是未知的,且佔用空間的。null使得索引、索引統計和值都更加複雜,並且影響優化器的判

JSNullUndefined的區別

class undefine 為我 false 應該 一行代碼 等於 解釋 什麽 在JavaScript中存在這樣兩種原始類型:Null與Undefined。這兩種類型常常會使JavaScript的開發人員產生疑惑,在什麽時候是Null,什麽時候又是Undefined?Un

MySQLMyISAMInnoDB區別及選擇,mysql添加外鍵

title 必須 pan 就會 默認 簡化 平臺 兩種 myisam InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面

淺談JS的!=、== 、!==、===的用法和區別 JSNullUndefined的區別 讀取XML文件 獲取路徑的方式 C#Cookie,Session,Application的用法區別? c#反射 抽象工廠

main 收集 data- 時間設置 oba ase pdo 簡單工廠模式 1.0 var num = 1; var str = ‘1‘; var test = 1; test == num //true 相同類型 相同值 te

mysql Varchar char的區別

計算機 一個 個數 arc eat 每一個 set span 方式 一、字符與字節與編碼關系 ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0

MySQLMyISAMInnoDB區別及選擇

重建 包含 好的 數據 mysql 備份 處理 表空間 種類 InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面跨平臺可

MySQLMyISAMInnoDB區別

原文:https://blog.csdn.net/frycn/article/details/70158313?utm_source=copy  InnoDB:支援事務處理等不加鎖讀取支援外來鍵支援行鎖不支援FULLTEXT型別的索引不儲存表的具體行數,掃描表來計算有多少行DELETE 表時,是一

mysqlInnoDBMyISAM的區別

兩者的區別: 1. InnoDB支援事務,MyISAM不支援,對於InnoDB每一條SQL語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務; 2. InnoDB支援外來鍵,而MyISAM不支援。對一個包含外來鍵的InnoDB錶轉為MYI

MySQL主表副表的區別,級聯操作的運用

劃重點: 1 被約束的表稱為副表,約束別人的表稱為主表,外來鍵設定在副表上的。 2 主表被參考的欄位通常都設定為主鍵 3 當有外來鍵約束的時候,新增資料的順序:先加主表,再新增副表的資料 4 當有外來鍵約束的時候,修改資料的順序:先修改副表,再修改主表的資料 5 當有外來鍵約束

MySQLvarcharchar區別

MySQL中varchar最大長度是多少? 一. varchar儲存規則: 4.0版本以下,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組)  5.0版本以上,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8

mysqlcharvarchar的區別

區別:char:定長,效率高,一般用於固定長度的表單提交資料儲存 ;例如:身份證號,手機號,電話,密碼等 varchar:不定長,效率偏低 1、varchar型別的變化 MySQL 資料庫的varchar型別在4.1以下的版本中的最大長度限制為255,其資料範圍可以是0255或1255(

RedisMySQL事務的區別

1、mysql中只有使用了InnoDB引擎的資料庫或表才支援事務; 2、使用“事務”的目的是:統一管理insert,update,delete這些寫操作,以此來維護資料的完整性。 事務命令 mysql: begin #顯式地開啟一個事務 commit #提交

MySQLMyISAMInnoDB的主要區別對比

item sam mysql 5.7 表空間 空間索引 mce table 格式 isa 特征MyISAMInnoDB 聚集索引 否 是 壓縮數據 是(僅當使用壓縮行格式時才支持壓縮MyISAM表。使用壓縮行格式和MyISAM的表是只讀的。) 是 數據緩

Redis之坑:RedisMySQL事務的區別

Note: 該篇討論的只是Redis與MySQL中事務的區別,並不能統一代表NO-SQL與關係型SQL; 在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支援事務; 事務使用

MySQL NULL和空值的區別

1:在進行count()統計某列的記錄數的時候,如果採用的NULL值,會別系統自動忽略掉,但是空值是會進行統計到其中的。 2: 判斷NULL 用IS NULL 或者 is not null,SQL 語句函式中可以使用ifnull()函式來進行處理,判斷空字元用=''或者 &

關於Mysqldatetime timestamp的區別

昨天在伺服器down了一個sql但是往mysql匯入時發現總是報錯 說是我的日期型別不符(之前是)datetime 型別的 之後又改成了 date 型別 ,再次匯入時又是相同的錯誤   好奇心下就上網查了點資料    DATETIME 與

MySQL NULL和空值的區別,索引列是否可空值或null

在建立表的時候儘量把欄位的預設值設定成 not null,除非你想儲存null;因為在mysql中為null的的欄位不會走索引,做統計的時候也不會被統計進去,如果想統計進去必須做特定的處理,這樣做比較複雜。可以給欄位的值設定成0、一個特殊的值或者一個空串代替空值。 MySQ

MYSQLINEXISTS的區別

目錄 3、結論: 在MYSQL的連表查詢中,最好是遵循‘小表驅動大表的原則’ 一、IN與EXISTS的區別 1、IN查詢分析 SELECT   *  FROM A WHERE id IN (SELECT id FROM B); 等價於:1、SELECT