對於您使用的每種數據類型,您都應該有某種理由。
nvarchar(255)(在SQL Server中)存儲255個Unicode字符(510個字節加開銷)。
在varchar列中存儲普通的UTF-8編碼的Unicode數據當然是可能的 - 在源文件中每個字節一個varchar字符(UTF-8將對多個字符適當地使用多個字節)。在這種情況下,普通的ASCII數據每個字符只使用1個字節,所以你沒有雙字節開銷。它有很多缺點,其中最重要的一點就是數據庫不再可以對排序和其他字符處理工作起到很大的幫助,因爲數據可能被編碼。但是,就像我說的那樣,這是可能的。
我推薦適當長度的char或varchar字符,例如帳號可能因爲零填充問題,許可證號碼,發票號碼(帶字母),郵政編碼,電話號碼等原因而不能使用。是從不包含任何寬字符的列的類型,並且通常僅限於羅馬字母和數字,有時甚至不是標點符號,並且通常被嚴重索引。對於表和索引中的列以及數據庫引擎中的工作集中的所有這些字符,額外NUL高字節的開銷絕對沒有必要。
我推薦nvarchar用於像名字和地址等東西,在可能有寬字符的地方,或許即使在近期內沒有可預見的用法。
我通常從不使用nchar--我從來不需要短代碼(通常是我選擇char列的地方),它需要寬字符。
在所有情況下,真正應該充分考慮長度(或最大)使用情況。我絕對不會使用名稱或地址的最大值,並且基準測試中的開銷可能很明顯。我已經看到在查詢的中間階段投射到varchar(長度)顯着提高了性能。
感謝您的所有信息。 – 2010-04-23 10:15:52