在SQL Server nvarchar(UCS-2)列中存储C#字符串(UTF-16)有什么后果?
|
似乎SQL Server对“ 0”字段使用Unicode UCS-2(2字节固定长度字符编码)。同时,C#的字符串使用Unicode UTF-16编码(注意:有些人不认为UCS-2是Unicode,但是它在Unicode子集0-0xFFFF中编码与UTF-16相同的所有代码点,并且就SQL Server而言,这是它本来支持的字符串“ \ Unicode \”最接近的东西。)
尽管UCS-2在基本多语言平面(BMP)中编码与UTF-16相同的基本代码点,但它并没有保留UTF-16允许的代理对的某些位模式。
如果将C#字符串写入SQL Server
nvarchar
(UCS-2)字段并将其读回,这将始终返回相同的结果吗?
从UTF-16编码更多代码点(例如高于0xFFFF)的意义上讲,UTF-16似乎是UCS-2的超集,但实际上它是2字节级别的UCS-2的子集,因为它更具限制性。
为了回答我自己的问题,我怀疑如果我的C#字符串包含高于0xFFFF的代码点(用字符对表示),这些代码点将在数据库中很好地存储和检索,但是如果我尝试在数据库中进行操作(例如,也许调用TOUPPER或尝试清除所有其他字符),那么以后可能会在显示字符串时遇到一些问题...除非SQL Server具有可识别代理对并将有效的“ 0”字符串视为UTF-16的函数。
没有找到相关结果
已邀请:
2 个回复
很缴
嘘伪
输出:
以防万一有人安装了Deseret字体,以下是您真正喜欢的字符串: 原文:TEST