设为首页 收藏本站
查看: 777|回复: 0

[经验分享] 使用 Unicode 的服务器端编程 (N前缀)--sql server 2005联机丛书

[复制链接]

尚未签到

发表于 2016-11-8 11:11:32 | 显示全部楼层 |阅读模式
  若要使数据库识别 Unicode,除了使用 nchar、nvarchar 和 ntext 数据类型定义 Unicode 存储外,还可以定义识别 Unicode 的客户端交互。可以通过在数据库服务器端执行下列操作来定义识别 Unicode 的客户端交互:
  

  • 在表列以及 CONVERT() 和 CAST() 操作中,将非 Unicode 数据类型转换为 Unicode 数据类型。   
  • 使用 ASCII() 和 CHAR() 函数的 Unicode 等价函数 UNICODE() 和 NCHAR() 来替换它们。   
  • 以 Unicode 格式定义存储过程和触发器的变量和参数。   
  • 以字母 N 为前缀标识 Unicode 字符串常量。

使用 UNICODE()、NCHAR() 和其他函数
  ASCII() 函数返回所传递字符的非 Unicode 字符代码。因此,在为非 Unicode 字符串使用 ASCII 函数的情况下为 Unicode 字符串使用等价函数 UNICODE()。对于 CHAR 函数也是如此;NCHAR 是其 Unicode 的等价函数。
  由于 SOUNDEX() 函数是基于英语拼音规则定义的,因此除非字符串只包含拉丁字符 A 到 Z 和 a 到 z,否则此函数对于 Unicode 字符串是没有意义的。
  ASCII、CHAR 和 SOUNDEX 可以传递 Unicode 参数,但这些参数被隐式转换为非 Unicode 字符串。这可能导致处理之前 Unicode 字符丢失,因为这些函数在定义时对非 Unicode 字符串执行操作。
  除了 UNICODE() 和 NCHAR() 函数以外,下列字符串操作函数会尽可能支持 Unicode:CHARINDEX()、LEFT()、LEN()、UPPER()、LOWER()、LTRIM()、RTRIM()、PATINDEX()、REPLACE()、QUOTENAME()、REPLICATE()、REVERSE()、STUFF()、SUBSTRING() 和 UNICODE()。这些函数接受 Unicode 参数,为 Unicode 字符串留出 2 字节的字符边界,并在输入参数为 Unicode 格式时使用 Unicode 排序规则进行字符串比较。
  定义存储过程中的参数
  使用 Unicode 数据类型定义参数可以保证客户端请求或输入在服务器上隐式转换为 Unicode 格式,并在处理中不被损坏。如果将参数指定为 OUTPUT 参数,Unicode 类型也可以在其返回到客户端时使损坏的几率降到最低程度。
  在以下存储过程中,变量作为 Unicode 数据类型声明。
  
CREATE PROCEDURE Product_Info
@name nvarchar(40)
AS
SELECT p.ListPrice, v.Name
FROM Production.Product p
INNER JOIN Purchasing.ProductVendor pv
ON p.ProductID = pv.ProductID  
INNER JOIN Purchasing.Vendor v
ON pv.VendorID = v.VendorID
WHERE p.Name = @name;
使用 N 前缀
  在服务器上执行的代码中(例如在存储过程和触发器中)显示的 Unicode 字符串常量必须以大写字母 N 为前缀。即使所引用的列已定义为 Unicode 类型,也应如此。如果不使用 N 前缀,字符串将转换为数据库的默认代码页。这可能导致不识别某些字符。
  例如,在前面示例中创建的存储过程可以按以下方式在服务器上执行:
  

EXECUTE Product_Info @name = N'Chain'
  使用 N 前缀的要求适用于服务器上产生的字符串常量和从客户端发送的字符串常量。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-297388-1-1.html 上篇帖子: 【转】SQL SERVER 2005 数据库状态为“可疑”的解决方法 下篇帖子: SQL Server TEXT类型字段字符串替换示例处理脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表