5 sql-server unicode ucs2 utf-16
根据这个,SQL Server的2K5使用UCS-2的内部.它可以在UCS-2中存储UTF-16数据(具有适当的数据类型,nchar等),但是如果存在补充字符,则将其存储为2个UCS-2字符.
这带来了字符串函数的明显问题,即SQL Server将一个字符视为2.
我有点惊讶的是,SQL Server基本上只能处理UCS-2,甚至更多,因此SQL 2K8中没有修复它.我很欣赏其中一些角色可能并不常见.
除了本文中建议的功能之外,还有关于在SQL Server 2K5中处理(损坏的)字符串函数和UTF-16数据的最佳方法的任何建议.
SQL Server 2012现在支持UTF-16,包括代理对.请参阅http://msdn.microsoft.com/en-us/library/ms143726(v=sql.110).aspx,尤其是"补充字符"部分.
因此,对原始问题的一个修复是采用SQL Server 2012.
字符串函数可以很好地处理 unicode 字符串;关心字符数的人将两字节字符视为单个字符,而不是两个字符。唯一需要注意的是 len() 和 datalength(),它们在使用 unicode 时返回不同的值。当然,它们返回正确的值 - len() 返回以字符为单位的长度,而 datalength() 返回以字节为单位的长度。它们只是由于两字节字符而恰好不同。
因此,只要您在代码中使用正确的函数,一切都应该透明地工作。
编辑:刚刚仔细检查过联机丛书,自 SQL Server 2000 以来,unicode 数据就可以与字符串函数完美配合。
编辑2:正如评论中所指出的,SQL Server的字符串函数不支持完整的Unicode字符集,因为缺乏对解析平面0之外的代理的支持(或者,换句话说,SQL Server的字符串函数最多只能识别2个)每个字符的字节数。)SQL Server 将正确存储和返回数据,但是任何依赖于字符计数的字符串函数都不会返回预期值。绕过此问题的最常见方法似乎是在 SQL Server 外部处理字符串,或者使用 CLR 集成添加 Unicode 感知字符串处理函数。
| 归档时间: |
|
| 查看次数: |
13025 次 |
| 最近记录: |