Mysql

空 LONGTEXT 還是 NULL?

  • September 10, 2013

在我的 MySQL 數據庫中,我有一個名為的欄位html_contents,其中包含要在網頁中顯示的所有 html。顯然 html 可能很大,而且肯定大於 64KB,因此我決定使用LONGTEXT而不是VARCHAR.

當該欄位未設置或留空時,您會說將其設置為 NULL 還是空字元串更好(對於 DB 而言更有效的別名)?

我讀到:何時使用 NULL 以及何時使用空字元串?但它通常談論空字元串(可能是小字元串而不是LONGTEXT)。

我想知道 withLONGTEXT是否是一個不同的故事,它是否可以節省大量空間或執行時間來使用NULL,而不是讓周圍空無一人LONGTEXT

MySQL官方手冊是決定是否使用這種值的一個很好的起點。

簡而言之:

優化

如果可能,將列聲明為 NOT NULL。通過更好地使用索引並消除測試每個值是否為 NULL 的成本,它使 SQL 操作更快。您還可以節省一些儲存空間,每列一位。如果您的表中確實需要 NULL 值,請使用它們。只需避免在每列中允許 NULL 值的預設設置。

NULL 值的問題

在 SQL 中,與任何其他值相比,NULL 值永遠不會為真,即使是 NULL。包含 NULL 的表達式始終生成 NULL 值,除非文件中針對錶達式中涉及的運算符和函式另有說明

使用 LOAD DATA INFILE 讀取數據時,空列或缺失列將使用 ’’ 進行更新。要將 NULL 值載入到列中,請在數據文件中使用 \N

一般來說,這可能是特定於應用程序的。真正的問題是,在我看來,空值的意義是什麼? 請記住,該選擇會更改處理此值的 SQL 查詢的語義,因此這是重點關注的地方。

作為一般規則,我更喜歡在值可能存在但未知的情況下使用 NULL,在假設我們知道值不適用的情況下使用空字元串。這使許多事情保持清醒。例如,空值和非空值的文本連接會產生空值。如果我們想知道結果實際上是未知的(並且有些情況我們會這樣做),這將很有幫助。無論如何,如果某個地方的值是未知的,並且我們想使用一個空字元串作為佔位符,我們必須明確地這樣做。同樣,如果已知該值不適用,我們可以按原樣使用 concat 一個空字元串。

就空間而言,我認為您會發現語義清晰度遠遠超過那裡的任何差異。在任何健全的數據庫實現中,我都不認為會有巨大的空間差異。

引用自:https://dba.stackexchange.com/questions/28086