首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL NOT NULL 約束與空值深度解析:空字符串 vs NULL、長度差異、索引影響

     編輯:MySQL 綜合教學

現象還原

表列有 NOT NULL 約束,卻能插入「空值」。工具插入卻報錯。經排查,插入的是 空字符串 '',而非 NULL。

核心區別

特性空字符串 ''NULL
含義確定的「空內容」「值未知/不存在」
長度LENGTH('') = 0LENGTH(NULL) = NULL
存儲空間不佔額外空間佔用(MyISAM 每列 1 bit,InnoDB 類似)
NOT NULL 約束允許禁止
比較運算'' = '' → trueNULL = NULL → NULL
索引存儲正常入索引全 NULL 不入 B+樹索引

實驗驗證

WHERE col IS NOT NULL AND col <> ''

索引性能影響

  • 允許 NULL 的列建索引,WHERE col IS NULL 可能無法命中索引(視版本)
  • 全 NULL 的複合索引鍵不入索引,導致 WHERE a IS NULL AND b IS NULL 全表掃描
  • 最佳實踐:業務允許時,字符串列 NOT NULL DEFAULT '',數值列 NOT NULL DEFAULT 0,日期列 NOT NULL DEFAULT '1970-01-01'
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved