2009-02-16 43 views
6

我現在設計數據庫方案和我的身影只是爲了安全起見,我應該使用nvarchar的我的文本列的數據類型(支持Unicode)。雖然我不指望非英文文本,但我認爲最好從開始的時候獲得支持以防萬一。是否有我不應該在Sql Server中使用NVARCHAR的原因?

我有什麼理由堅持使用普通的varchar?性能?

+0

我想將SQL Server的版本添加到您的問題,它可能會有所作爲? – Ash 2009-02-16 07:53:22

+0

我目前正在使用sql server 2005,但我們最終希望轉移到2008年。 – mmcdole 2009-02-16 07:55:24

回答

1

是,性能,尺寸。 nvarchar需要更多的字節,我認爲它是雙倍的(糾正我,如果我錯了),這是因爲unicode的支持。因此,如果您不需要unicode支持,請使用常規varchar。

11

在今天的i18n世界中,nvarchar很有意義。因爲這是數據指定不會是Unicode(也許您有需要是ASCII一些系統字段)VARCHAR可能是有意義的。

我喜歡的事情名稱,描述,地址等

varchar越小使用nvarchar的默認,所以有可能與varchar超過nvarchar一些IO儲蓄(但要注意,代碼頁變成了更大的問題)。

4

而且,看到了這個問題:VARCHAR vs NVARCHAR performance.

就個人而言,我說堅持VARCHAR(因爲我在這個線程回答)。有一個不平凡的性能開銷。

1

我們幾乎所有的東西都使用VARCHAR,而NVARCHAR只是偶爾使用。

產品代碼不需要爲nvarchar - 我們不允許任何比AZ,0-9等和「_」在他們...

其雙倍的存儲空間,而且只有一半每個索引頁(和每個數據頁)的條目以及內存緩存的一半被「浪費」,比較數據的更多CPU週期等等。

IME常用的外國口音只能在Varchar(即LATIN-1)中找到。我們沒有計劃做中文或其他替代字符集,並且當我們通過從第一天開始使用NVarchar來處理這些字符集時,我們最擔心的是 - 從文本的右到左或垂直對齊? :(

如果你允許NVarchar爲一個名字,你打算如何從鍵盤輸入擴展字符串?如果你導入數據(所以它已經是NVarchar)你將如何能夠使用標準的QWERTY鍵盤搜索那個客戶,很多很多都涉及到應用程序的國際化,所以我認爲沒有必要「允許使用NVarchar」

但是還有很多地方我去擁有NVarchar ......並且大多數列也是50個字符寬......他們必須知道一些有關郵政編碼的人口增長和擴張計劃,我不這麼做!!

1

如前所述,權衡是未來防禦與性能。根據我的經驗,SQL Server在較低的CPU和內存限制下表現相當出色,但給它一個較慢的磁盤I/O並且它確實可以突破。

如果您沒有雙字節字符集(即中文字符)的計劃,請使用VARCHAR(MAX)。

0

一般來說,從具有最少限制的最昂貴的數據類型開始。投入生產。如果性能開始出現問題,請查找這些nvarchar列中實際存儲的內容。那裏有不適合varchar的任何字符嗎?如果不是,切換到varchar。在你知道疼痛發生在哪裏之前,不要嘗試預先優化。我的猜測是nvarchar/varchar之間的選擇不會在可預見的將來減慢你的應用程序的速度。應用程序的其他部分將進行性能調整,從而爲您帶來更多的錢。

相關問題