SQL语句 不支持日语 韩语 泰国语等的解决办法

update table set column1=N'한국의' where column1='韩语'

insert into table values('1',N'한국의');

大家应该能看出问题 就是多了个字母'N'

在 SQL Server 中處理 Unicode 字串常數時,必需為所有的 Unicode字串加上前置詞 N

 

在 SQL Server 中處理 Unicode 字串常數時,您必需在所有的 Unicode 字串前加上大寫字母 N做為前置詞,如《SQL Server 線上叢書》主題<使用 Unicode 資料>所述。「N」前置詞代表的是 SQL-92標準中的國家語言,且必須為大寫。如果您沒有在 Unicode 字串常數前面加上 N 做為前置詞,則 SQL Server會在使用字串前,先將其轉換成目前資料庫的非 Unicode 字碼頁。

這個標記法是為現有應用程式提供回溯相容性的必要項目。例如,"SELECT 'Hello'" 必須繼續傳回非 Unicode字串,因為許多應用程式會預期這是 SQL Server 6.5 的行為,而 SQL Server 6.5 不支援 Unicode資料;而加入新語法 "SELECT N'Hello'" 可以在 SQL Server 7.0 之間來回傳送 Unicode字串。

每當您傳送 Unicode 資料至 SQL Server 的時候,都必須在 Unicode 字串前面加上 N做為前置詞。如果應用程式有啟用 Unicode,並且沒有為 Unicode 字串常數加上 N 做為前置詞就將資料傳送至 SQLServer 7.0,則可能會遇到字元資料遺失的情況。如果 SQL Server 將沒有加上 N 做為前置詞的 Unicode字串,從 Unicode 轉換成 SQL Server 資料庫字碼頁,則 Unicode 字串中任何不存在於 SQL Server字碼頁中的字元將會遺失。請注意,此轉譯與 Autotranslation、OemToAnsi 或 AutoAnsiToOem轉換無關,這些轉換都是發生在用戶端的 ODBC、OLEDB 或資料程式庫層。

如果應用程式並沒有將 Unicode 資料傳送至 SQL Server,且用戶端的 ANSI 字碼頁和 SQL Server字碼頁相符合,就不需要在字串常數前面加上 N 做為前置詞,您也不會因為沒加上前置詞而造成資料遺失。然而,SQL Server 7.0可以讓您在安裝期間選取不同於排序順序的 Unicode 定序;在某些情況下,這可能會造成以 N為前置詞的字串的相關作業,與沒有前置詞的作業產生不同的結果。例如,假設安裝 SQL Server 7.0 時,選取了二進位編碼排序順序(排序順序是用於比較非 Unicode 字串時),並選取標準 Unicode 做為 Unicode 定序 (Unicode定序是用於比較 Unicode 字串)。比較兩個非 Unicode 字串 ("ABC" = "abc") 的運算式會傳回False,因為根據二進位編碼排序順序,大寫字母 A 並不等於小寫字母 a。相對地,運算式 (N'ABC' = N'abc') 會傳回True。因為字串前面有加上 N 做為前置詞,字串就會被轉換成 Unicode,並使用 Unicode定序來比較這些字串。與二進位編碼排序順序不同的是,標準 Unicode 定序不會區分大小寫,所以會將這兩個字串視為相同。

請注意,如果這兩個字串常數運算元中,有一個加上 N 前置詞,而另一個沒有加上 N 前置詞,則非 Unicode 字串會轉換成Unicode,且比較這兩個字串時會使用 Unicode 定序。在《SQL Server線上叢書》的<比較運算子>主題中有提供您關於這個行為的說明。


原文地址:http://support.microsoft.com/default.aspx?scid=kb;zh-tw;239530


原文地址:https://www.cnblogs.com/kpsm/p/1812881.html