mysql中null與‘’的區別
Mysql中空字元<''>和空值的區別,一直都知道mysql中空字串(”)和空值(null)之間有區別,但是沒好好研究過。直到專案上,這兩個概念被我搞混了之後才想起來研究一下。
根據網上的說法,空字串(”)是不佔用空間,而空值(null)是佔用空間。(這裡我不太明白,因為我的理解是,字串都會有一個結束符,這個結束符不會佔用空間嗎??)。
雖然有不明白的地方,但是不影響這篇文章對這兩個值的分析。
為了分析區別,這裡新建一張表 test_null,並插入4行資料。
1 2 3 4 5 |
|
這裡需要說一下,將欄位設定為 not null之後是可以插入空字元(”)的。影響的只是不能插入空值(null)。
首先比較一下,空字元(”)和空值(null)查詢方式的不同。
由此可見,null 和 ”的查詢方式不同。而且比較字元 ‘=’’>’ ‘<’ ‘<>’是不能用於查詢null。如果需要查詢空值(null),需使用is null 和is not null。
第二種比較,參與運算。
由此可見,空值(null)是不能參與任何計算,因為空值參與任何計算都為空。所以,當程式業務中存在計算的時候,需要特別注意。如果非要參與計算,需使用ifnull函式,將null轉換為”才能正常計算。
第三種比較,統計數量
由此可見,當統計數量的時候。空值(null)並不會被當成有效值去統計。同理,sum()求和的時候,null也不會被統計進來,這樣就能理解,為什麼null計算的時候結果為空,而sum()求和的時候結果正常了。
以上對比,算得上是程式中經常會遇到但又不容易注意的問題。
網路上,針對這兩個值。有一種說法會比較好理解。在存電話號碼欄位中,空值(null)代表你沒有電話,而空字串(”)則代表,你有電話但是沒有填寫。或者理解,填寫了又刪除掉。
還有一種理解方式。null是尚未定義的值,表示未知。而”,確定為一個空字串。所以未知的值,無法進行各種比較(大於,小於,等於),也不能用於計算(加減乘除)。
我的理解是,不考慮是否佔用記憶體。null代表什麼都沒有,”代表的就是一個空白的字串。所以,null什麼都沒有就不能用於比較。
無論怎麼理解,都需要記住這兩個值的區別。避免在專案中碰到錯誤。
相關推薦
mysql中null與not null的區別及效率
<span style="font-family: 宋體; background-color: rgb(255, 255, 255);">經常用mysql的人可能會遇到下面幾種情況:</span> 1、我欄位型別是not null,為什麼我可以插入空值 2、為什麼not
mysql中null與‘’的區別
Mysql中空字元<''>和空值的區別,一直都知道mysql中空字串(”)和空值(null)之間有區別,但是沒好好研究過。直到專案上,這兩個概念被我搞混了之後才想起來研究一下。 根據網上的說法,空字串(”)是不佔用空間,而空值(null)是佔用空間。(這裡我不太明
mysql中Null 與空值的區別
mysql中null確實很難纏,往往很多高手在sql優化時都被它坑過,下面總結了他們的區別: MySQL中,null是未知的,且佔用空間的。null使得索引、索引統計和值都更加複雜,並且影響優化器的判
JS中Null與Undefined的區別
class undefine 為我 false 應該 一行代碼 等於 解釋 什麽 在JavaScript中存在這樣兩種原始類型:Null與Undefined。這兩種類型常常會使JavaScript的開發人員產生疑惑,在什麽時候是Null,什麽時候又是Undefined?Un
MySQL中MyISAM與InnoDB區別及選擇,mysql添加外鍵
title 必須 pan 就會 默認 簡化 平臺 兩種 myisam InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面
淺談JS中的!=、== 、!==、===的用法和區別 JS中Null與Undefined的區別 讀取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
MySQL中MyISAM與InnoDB區別及選擇
重建 包含 好的 數據 mysql 備份 處理 表空間 種類 InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面跨平臺可
MySQL中MyISAM與InnoDB區別
原文:https://blog.csdn.net/frycn/article/details/70158313?utm_source=copy InnoDB:支援事務處理等不加鎖讀取支援外來鍵支援行鎖不支援FULLTEXT型別的索引不儲存表的具體行數,掃描表來計算有多少行DELETE 表時,是一
mysql中InnoDB與MyISAM的區別
兩者的區別: 1. InnoDB支援事務,MyISAM不支援,對於InnoDB每一條SQL語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務; 2. InnoDB支援外來鍵,而MyISAM不支援。對一個包含外來鍵的InnoDB錶轉為MYI
MySQL中主表與副表的區別,級聯操作的運用
劃重點: 1 被約束的表稱為副表,約束別人的表稱為主表,外來鍵設定在副表上的。 2 主表被參考的欄位通常都設定為主鍵 3 當有外來鍵約束的時候,新增資料的順序:先加主表,再新增副表的資料 4 當有外來鍵約束的時候,修改資料的順序:先修改副表,再修改主表的資料 5 當有外來鍵約束
MySQL中varchar與char區別
MySQL中varchar最大長度是多少? 一. varchar儲存規則: 4.0版本以下,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組) 5.0版本以上,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8
mysql中char與varchar的區別
區別:char:定長,效率高,一般用於固定長度的表單提交資料儲存 ;例如:身份證號,手機號,電話,密碼等 varchar:不定長,效率偏低 1、varchar型別的變化 MySQL 資料庫的varchar型別在4.1以下的版本中的最大長度限制為255,其資料範圍可以是0255或1255(
Redis與MySQL中事務的區別
1、mysql中只有使用了InnoDB引擎的資料庫或表才支援事務; 2、使用“事務”的目的是:統一管理insert,update,delete這些寫操作,以此來維護資料的完整性。 事務命令 mysql: begin #顯式地開啟一個事務 commit #提交
MySQL中MyISAM與InnoDB的主要區別對比
item sam mysql 5.7 表空間 空間索引 mce table 格式 isa 特征MyISAMInnoDB 聚集索引 否 是 壓縮數據 是(僅當使用壓縮行格式時才支持壓縮MyISAM表。使用壓縮行格式和MyISAM的表是只讀的。) 是 數據緩
Redis之坑:Redis與MySQL中事務的區別
Note: 該篇討論的只是Redis與MySQL中事務的區別,並不能統一代表NO-SQL與關係型SQL; 在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支援事務; 事務使用
MySQL 中NULL和空值的區別
1:在進行count()統計某列的記錄數的時候,如果採用的NULL值,會別系統自動忽略掉,但是空值是會進行統計到其中的。 2: 判斷NULL 用IS NULL 或者 is not null,SQL 語句函式中可以使用ifnull()函式來進行處理,判斷空字元用=''或者 &
關於Mysql中datetime 與 timestamp的區別
昨天在伺服器down了一個sql但是往mysql匯入時發現總是報錯 說是我的日期型別不符(之前是)datetime 型別的 之後又改成了 date 型別 ,再次匯入時又是相同的錯誤 好奇心下就上網查了點資料 DATETIME 與
MySQL 中NULL和空值的區別,索引列是否可空值或null
在建立表的時候儘量把欄位的預設值設定成 not null,除非你想儲存null;因為在mysql中為null的的欄位不會走索引,做統計的時候也不會被統計進去,如果想統計進去必須做特定的處理,這樣做比較複雜。可以給欄位的值設定成0、一個特殊的值或者一個空串代替空值。 MySQ
MYSQL中IN與EXISTS的區別
目錄 3、結論: 在MYSQL的連表查詢中,最好是遵循‘小表驅動大表的原則’ 一、IN與EXISTS的區別 1、IN查詢分析 SELECT * FROM A WHERE id IN (SELECT id FROM B); 等價於:1、SELECT