線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2602
推到 Plurk!
推到 Facebook!

有需要全部使用nvarchar 嗎?

尚未結案
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-22 15:35:11 IP:218.162.xxx.xxx 未訂閱
小弟的資料庫有一姓名欄位及身份證欄位, 原本都是用varchar 型態 由於非常用字無法在varchar內儲存 於是想把姓名欄位型態改為nvarchar, 請問身份證字號的欄位有需要一起改為nvarchar 嗎? 還是維持原來的varchar, 請各位給小弟一些建議 小弟的開發工作為ASP.NET 使用VS.NET開發
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-22 16:56:38 IP:211.22.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-22 18:06:35 IP:203.204.xxx.xxx 未訂閱
建議 含中文字, 固定長度 => 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-22 20:13:29 IP:218.162.xxx.xxx 未訂閱
請問有中文字的資料表, 如果內容不會出現非常用字(例如一個資料表中只存甲, 乙,丙...這些中文字) 是用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-22 20:21:38 IP:211.22.xxx.xxx 未訂閱
是固定長度的就用nchar,不是固定長度的用nvarchar,所謂固定與不固定就是欄位內儲存的字串長度一不一樣。 如果欄位內只存'甲'或是'乙',就用nchar,如果可能存'甲'或是'甲乙'就用nvarchar。 ----------------------------------------------- Creation is the fundation of promotion. 發表人 - stallion 於 2005/05/22 20:23:13
Arlung Miao
初階會員


發表:9
回覆:44
積分:25
註冊:2004-08-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-22 20:38:18 IP:219.134.xxx.xxx 未訂閱
朋友,我也來湊個熱鬧: 我覺得應該掌握一個原則就是:如果預計欄位需要存放多國文字或者特殊符號,就因該使用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('...'));
系統時間:2024-06-27 3:10:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!