MSSQL資料表欄位無法輸入某些中文字

最近同事發現在某個資料表的欄位上要輸入一個中文字「彣」時,輸入後都會顯示成「?」。有某些特定的中文字就是無法加入到這個欄位上。

後來我看了一下,發現這個欄位的型別是varchar,我想應該要改成nvarchar才能支援多國語言。後來改成nvarchar後,果然可以直接去修改資料表這個欄位的內容,直接輸入「彣」了。

不過,後來查了一下網路上的資料,發現在下SQL指令時,要能正確地輸入這種特殊字元的話,除了資料表的欄位必須設定成nvarchar外,還必須在SQL指令上加上N'',例如:


-- 在SQL指令上都加上N''
Insert TestIME
VALUES( N'小彣',N'小彣')

以下是我的一些簡單的測試,發現就算是針對一些設定成varchar的欄位,也可以加上N'',不會有問題的。所以未來應該是只要是要設定字串的話,就是多加一個N''囉。

測試用資料表設計如下。一個欄位用nvarchar,另一個用varchar。



測試的語法如下:


-- 測試在輸入時不加N
INSERT TestIME
VALUES( '小彣', '小彣')

-- 測試在輸入時都加上N
INSERT TestIME
VALUES( N'小彣', N'小彣')

-- 測試針對一般字完都加上N
INSERT TestIME
VALUES( N'小明', N'小明')

select * FROM TestIME

執行後的結果如下:

留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式

使用regular expression來match中括號(square bracket)