Unicode 字符串,用 N 前缀

From :http://support.microsoft.com/kb/239530/zh-cn

 

概要:

       处理 Unicode 字符串常数中 SQL Server 时您必须在前面所有的 Unicode 字符串以大写的字母 N,SQL Server 联机丛书主题使用 Unicode 数据中所述。"N"前缀代表在 sql-92 标准国家语言,而且必须为大写。如果您不执行前缀 Unicode 字符串常量,用 N,SQL Server 会将其转换为当前数据库的非 Unicode 代码页之前它将使用该字符串。

 

More:

 

     此表示法,必须提供与现有的应用程序的向后兼容性。例如对于"SELECT Hello"必须返回一个非-Unicode 字符串,因为许多应用程序将预期的不支持 Unicode 数据 ; 其中 SQL Server 6.5 行为继续在新语法"SELECT N'Hello '"已被添加到允许的 Unicode 字符串和从 SQL Server 7.0 的传递。

Unicode 数据传递给 SQL Server 任何时间必须前缀 Unicode 字符串,用 n。如果您的应用程序是支持 Unicode 的并且作为 Unicode 字符串常量,而 N 的前缀不是将数据发送到 SQL Server 7.0,您可能会遇到字符数据的丢失。当从 Unicode SQL Server 数据库的代码页、 Unicode 字符串中不存在 SQL Server 代码页中的任何字符的 Unicode 字符串但 N 不前缀 SQL Server 转换将会丢失。请注意此转换不相关 Autotranslation、 OemToAnsi,或 AutoAnsiToOem 都在 ODBC、 OLEDB,或 db-library 层客户端发生的转换。

如果您的应用程序不发送 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 作为前缀,并在另一种不是将被非-Unicode 字符串转换为 Unicode 和 Unicode 排序规则将应用时进行比较。此行为会介绍 SQL Server 联机丛书主题"比较运算符"。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11 引入了对 Unicode 字符串的支持,包括以下几个方面: 1. Unicode 字符串字面值:使用前缀 u8、u、U、L 分别表示 UTF-8、UTF-16、UTF-32、宽字符编码的 Unicode 字符串字面值。 ```cpp // UTF-8 字符串字面值 const char* u8str = u8"Hello World!"; // UTF-16 字符串字面值 const char16_t* ustr = u"Hello World!"; // UTF-32 字符串字面值 const char32_t* Ustr = U"Hello World!"; // 宽字符编码的 Unicode 字符串字面值 const wchar_t* wstr = L"Hello World!"; ``` 2. Unicode 字符串类型:新增了名为 u16string 和 u32string字符串类型,分别代表 UTF-16 和 UTF-32 编码的 Unicode 字符串。 ```cpp #include <iostream> #include <string> int main() { // UTF-16 编码的 Unicode 字符串 std::u16string u16str = u"Hello World!"; // UTF-32 编码的 Unicode 字符串 std::u32string u32str = U"Hello World!"; std::cout << u16str << std::endl; std::cout << u32str << std::endl; return 0; } ``` 3. Unicode 编码转换:新增了头文件 <codecvt>,提供了 std::wstring_convert 类模板和 std::codecvt 类模板,用于在不同的编码之间进行转换。 ```cpp #include <iostream> #include <string> #include <codecvt> int main() { // UTF-16 编码的 Unicode 字符串 std::u16string u16str = u"Hello World!"; // 将 UTF-16 编码的字符串转换为 UTF-8 编码的字符串 std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> cvt; std::string utf8str = cvt.to_bytes(u16str); std::cout << utf8str << std::endl; return 0; } ``` 以上就是 C++11 对 Unicode 字符串的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值