SQLServer nchar和.net unicode与特殊的F801字符

本文关键字:F801 字符 nchar net unicode SQLServer | 更新日期: 2023-09-27 18:13:53

我有一个现有的数据库与现有的数据,我不能改变它的结构或值。在该数据库中有一个nvarchar列,其中包含从F800开始的渐变unicode区域中的值。当我在SQL中选择这些值或使用SQL函数时,unicode -我得到适当的值。当我在。net中选择相同的值时——我得到一个错误值——这个模糊区域中的所有值都变成65533。我需要这些值-我怎样才能说服。net给我这些值-比如将连接编码更改为自定义编码-或ucs-2等…

下面是演示问题的示例代码:

c.CommandText = "select NCHAR(55297)";
using (var r = c.ExecuteReader())
{
   r.Read();
   var result = r[0]; //expected 55297 but got 65533
}

SQLServer nchar和.net unicode与特殊的F801字符

55297是没有定义的D801吗?你可能想要f801,也就是63489?但它似乎也没有定义。你想要哪个角色?

如果我尝试做一个"选择NCHAR(55297)"在SQL Server管理工作室,我得到菱形问号,但如果我做"选择NCHAR(63489)"我得到一个点:

如果你想要的是字符值,你可以直接请求它们:

select Unicode(NCHAR(63489))

返回63489(整数形式)

如果你想要一个字节数组,你可以请求:

select CONVERT(varbinary(MAX), FieldThatIsAnNvarchar) from ThatTable

经过多次调查,我没能找到任何解决办法。我在这里找不到任何可以工作的双向转换。

似乎有些unicode值是为。net不支持的一些奇怪的unicode场景而设计的,但是部分支持的方式打破了我们在这里需要的