有需要全部使用nvarchar 嗎? |
尚未結案
|
will
中階會員 發表:176 回覆:135 積分:62 註冊:2002-04-14 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
varchar[(n)]
長度為 n 個字元之可變長度非 Unicode 字元資料。n 必須介於 1 至 8,000,儲存大小為實際輸入資料的長度,而非 n 個位元組。輸入的資料長度可以是 0 字元。 varchar 的 SQL-92 同義資料表為 char varying 或 character varying。 nvarchar(n)
n 字元的可變長度 Unicode 字元資料。n 必須是 1 到 4,000 的其中一個值。儲存大小,以位元組計,是輸入字元數的兩倍大。輸入的資料長度可以是 0 字元。nvarchar 的T SQL-92 同義資料表為 national char varying 和 national character varying。 因此以上兩者除了儲存大小的算法之外,還有就是能不能儲存UNICODE,請自行決定! -----------------------------------------------
Creation is the fundation of promotion.
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
建議
含中文字, 固定長度 => nchar
含中文字, 不固定長度 => nvarchar
不含中文字, 固定長度 => char
不含中文字, 不固定長度 => varchar 注意, 是建議, 不是必須, 其實你要用哪種都可以 固定長度存取會比非固定長度快 nchar(10) 比 char(10) 多了一倍儲存空間, 速度也略為慢點 (非常非常不明顯) 但是拿 char(10) 去存中文字只能 5 個, 英文字最多 10 個
網頁 < INPUT NAME=xxx SIZE=10 > 此處中文字和英文字都算 1 個, 避免估算可儲存字數麻煩, 會建議用 nchar(10), 如果欄位中只會出現英數字, 可用 char(10) 如果欄位很長 < INPUT NAME=xxx SIZE=1000 > , 但是幾乎都儲存很短資料, 可以用 varchar(1000) 或 varchar(2000) 或 nvarchar(1000) (多花一點點時間, 但省空間) 但是中文字或 UnitCode 包含的一些字元, 可能在 char 儲存有問題, 建議用 nchar 沒有絕對的標準, 變化選擇, 存乎一心 *********************
如果您滿意答案,請結案
********************* 發表人 - pcboy2 於 2005/05/22 18:07:18 發表人 - pcboy2 於 2005/05/22 18:11:17
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
will
中階會員 發表:176 回覆:135 積分:62 註冊:2002-04-14 發送簡訊給我 |
請問有中文字的資料表, 如果內容不會出現非常用字(例如一個資料表中只存甲, 乙,丙...這些中文字)
是用varchar 好呢 還是nvarchar?
引言: 建議 含中文字, 固定長度 => nchar 含中文字, 不固定長度 => nvarchar 不含中文字, 固定長度 => char 不含中文字, 不固定長度 => varchar 注意, 是建議, 不是必須, 其實你要用哪種都可以 固定長度存取會比非固定長度快 nchar(10) 比 char(10) 多了一倍儲存空間, 速度也略為慢點 (非常非常不明顯) 但是拿 char(10) 去存中文字只能 5 個, 英文字最多 10 個 網頁 < INPUT NAME=xxx SIZE=10 > 此處中文字和英文字都算 1 個, 避免估算可儲存字數麻煩, 會建議用 nchar(10), 如果欄位中只會出現英數字, 可用 char(10) 如果欄位很長 < INPUT NAME=xxx SIZE=1000 > , 但是幾乎都儲存很短資料, 可以用 varchar(1000) 或 varchar(2000) 或 nvarchar(1000) (多花一點點時間, 但省空間) 但是中文字或 UnitCode 包含的一些字元, 可能在 char 儲存有問題, 建議用 nchar 沒有絕對的標準, 變化選擇, 存乎一心 ********************* 如果您滿意答案,請結案 ********************* 發表人 - pcboy2 於 2005/05/22 18:07:18 發表人 - pcboy2 於 2005/05/22 18:11:17 |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
Arlung Miao
初階會員 發表:9 回覆:44 積分:25 註冊:2004-08-25 發送簡訊給我 |
朋友,我也來湊個熱鬧: 我覺得應該掌握一個原則就是:如果預計欄位需要存放多國文字或者特殊符號,就因該使用n...,否則,不用指定為Unicode的類型。 另外,需要注意的是,由於DB、OLE DB Driver及Application的Coding
方式不同會造成在Application中需要以不同的方式處理該欄位。如果這樣
對Coding的影響很大,就應該在DB段做處理,比如指定DB的Charactor Set
指定為Unicode(在某些類型的DB中)。舉個例子: 如果你習慣以如下方式更新表時,SQL 2000和Oracle的寫法就不同
Table1:
F1: nvarchar SQL 2000中,以下兩種方式均可(當僅僅包含Local字符時)
adoConnection.Execute('UPDATE Table1 SET F1 = ' Q('...'));
adoConnection.Execute('UPDATE Table1 SET F1 = N' Q('...')); Oracle 9i中,只能寫成
adoConnection.Execute('UPDATE Table1 SET F1 = N' Q('...'));
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |