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
執行後的結果如下:
後來我看了一下,發現這個欄位的型別是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
執行後的結果如下:
留言
張貼留言