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

摘要:
「N」 介词代表SQL-92标准中的国家语言,必须大写。如果不在Unicode字符串常量前加N,SQL Server将在使用该字符串之前将其转换为当前数据库的非Unicode代码页。例如,“SELECT'Hello'”必须继续返回非Unicode字符串,因为许多应用程序希望这是SQL Server 6.5的行为,而SQL Server 6.5不支持Unicode数据;添加新语法“SELECTN'Hello'”可以在SQL Server 7.0之间来回传输Unicode字符串。如果SQL Server将没有N作为前缀的Unicode字符串从Unicode转换为SQL Server数据库代码页,则Unicode字符串中不存在于SQL Server代码页的任何字符都将丢失。
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


免责声明:文章转载自《SQL语句 不支持日语 韩语 泰国语等的解决办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mac vim模式下删除多行 ecs退出到默认模式下 选中dd 删除其中一行layer 弹出框 回传事件获取弹出框的一些属性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Emoji表情符号兼容方案

Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)表情符号现已普遍应用于手机短信和网络聊天软件。emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。手机上如何使用emoji:1.iphone、ipad系统:安装emoji free,再设置-通用-键盘...

ANSI、ASCII、Unicode和UTF-8编码

来自:http://blog.163.com/yang_jianli/blog/static/161990006201371451851274/ -------------------------------------------------------------------------------------------- 1、ANSI编码     ...

Python2.7 中文字符编码 & Pycharm utf-8设置、Unicode与utf-8的区别

Python2.7 中文字符编码 & Pycharm utf-8设置、Unicode与utf-8的区别 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2017-6-6  一、关于编码和乱码,有以下几个重要的概念需要搞清楚:     二、Pycharm 设置编码, 可以按如下步...

CHAR,TCHAR,WCHAR 三者的区别与转换

#ifdef   UNICODE               typedef   wchar_t   TCHAR;     #else               typedef   unsigned   char   TCHAR;     #endif     typedef   unsigned   char   CHAR;     typedef  ...

C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')

转:http://blog.sina.com.cn/s/blog_9ffcd5dc01014nw9.html 前面的几天一直都在复习着被实习落下的C++基础知识。今天在复习着上次创建的窗口程序时,出现了一个错误,百思不得其解。因为是同样的代码,上次的都能顺利的通过编译,这次自己新建了一个工程结果就有一个错误出现,是在调用Create()函数时,传参数出现问...

unicode 与 utf-8

unicode 计算机的世界是二进制的世界,无论文字音频传输存储之时都要落实到二进制上。而起源于西方的计算机技术自然深根于他们的文化,于是最初的ascii码基本只是西方的文字编码集。随着计算机的普及,各个国家各个民族基本都为自己的文字创立了字符集。多而杂的规则为数据的传输交换带来巨大困难。是时候要统一字符集了。 unicode应运而生。unicode旨在为...