[THIS IS 不是一個關於產品:NVARCHAR或如何存儲漢字]SQL Server字符集和N前綴
SQL Server 2008 Express的
數據庫歸類爲SQL_Latin1_General_CP1_CI_AS
create table sample1(val varchar(2))
insert into sample1 values(N'中文')
- 我知道這些漢字會變成垃圾角色。
- 我知道我可以使用nvarchar來克服所有問題。
我不知道的是:爲什麼在運行插入語句時沒有「字符串太長」的錯誤?
- N前綴表示客戶端將使用UNICODE對字符串進行編碼。
- 2漢字將變爲4個字節。
- varchar(2)只能包含2個字節。
爲什麼人們投下這個問題?真?
那麼,SQL Server發現你插入到'varchar'列中,因此它會**自動**將你傳入的字符串轉換爲非Unicode,varchar'兼容的兩個字符串。兩個字符對於此列來說不太大。 –
首先,varchar不能直接存儲這些字符,它會轉換它們,所以通常我們使用nvarchar。你可以試試這個create table sample3(val nvarchar(2)) insert into sample3 values(N'中文') –
我知道這不是關於存儲中文的問題。就像我告訴過你的那樣,一個隱含的投射會發生並將它存儲在你的varchar中作爲「??」 (至少在我的代碼頁上) – Paul