查看完整版本: SQL Server儲存NULL或空值的問題
頁: [1]

z24374203 發表於 2018-6-23 02:26 PM

SQL Server儲存NULL或空值的問題

請問有人知道當SQL Server儲存NULL與空值的差別嗎?

問題一、請問資料庫自己帶的NULL和程式Insert的NULL有一樣嗎?
因為我查詢資料表的時候,如果是資料庫自己帶的NULL,
搜尋出來的欄位底色與程式Insert的NULL不太一樣。

問題二、查了一下關於效能的問題,NULL效能和空值做比較,
空值的效能完勝NULL。雖然有給理由,就是和資料列的bitmap有關係。
這樣子,是要告訴我們Insert如果沒有值,也是塞一個預設值,而不是由
資料庫自己帶NULL的意思嗎?


問題三、資料庫自己帶的NULL和程式帶的空值,哪一個占用比較多的儲存空間?



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

henry816 發表於 2018-7-4 02:54 PM

本帖最後由 henry816 於 2018-7-4 02:58 PM 編輯

問題一
NULL是一樣的, 除非你insert時是放入'NULL' 字串, 而不是真正的NULL但是NULL不會等於NULL, NULL = NULL 永遠是false, 所以判斷時要用IS或IsNull去判斷

問題二
NULL有其好用的地方, 用不用是視你程式目的來決定
例如: 某個欄位預期的值範圍是-99 ~ 99, 程式就可以用NULL表示這個欄位沒有被指定值

問題三
NULL最少佔用1個bit, 看你的欄位類型決定
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

w12463 發表於 2018-7-4 08:23 PM

補充一下 varchar之類型態的 給空值('' <-?)和null意義不太一樣
當你要join或調用時 null有時會搞事
這類的在一開始就設default比較省事

z24374203 發表於 2018-7-7 09:32 AM

henry816 發表於 2018-7-4 02:54 PM static/image/common/back.gif
問題一
NULL是一樣的, 除非你insert時是放入'NULL' 字串, 而不是真正的NULL但是NULL不會等於NULL, NULL = N ...

所以說,和select的效能差異不大?

是這樣嗎?

love88131496 發表於 2018-7-13 01:05 PM

效能:
資料庫的效能差異會在資料表作join查詢時明顯突顯出來。單一資料表查詢的效能,多半是在搜尋結果到CLIENT的傳輸量差異(例如搜尋出幾萬筆結果,每筆都要傳大量的資料內容)。
所以一個欄位是定義NULL和定義0長度自串,搜尋結果差異不大。
但是如果是在join查詢,而這個欄位又不是index欄位,且又是varchar形態,又被作為on的條件,NULL值和0長度字串差異就會大。
其餘,NULL內容和0長度字串,端看你設計的資料庫邏輯而定。其餘可忽略

建議:
資料庫欄位內容建議不要定義可使用NULL值。一律給初始值。原因如下:
1. 不同資料庫對於NULL處理有不同,不使用NULL跨資料庫彈性大
2. 報表需求(例如常見的匯總、統計等),不需要對NULL作特別處理
3. 資料庫維護(移轉、備份),會因為使用工具、目的資料庫限制等,可能NULL會遺失

以上第3點的細節說明:
程式設計時,往往開發環境單純,資料庫匯入匯出都在本機或區網,權限也都開很大,所以不會有感覺。但一旦到正式環境,可能會因為正式主機的網路安全限制,無法直接透過資料庫官方工具去匯入匯出資料。例如可能僅能使用檔案,被迫資料要從A資料庫匯出檔案,傳送到B主機,再由B主機從檔案匯入。這過程很容易把NULL相關的資料給弄錯...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>
頁: [1]