代码之家  ›  专栏  ›  技术社区  ›  Martin Staufcik

在SQL Server中存储特殊的Unicode字符并在.NET中检索[重复]

  •  5
  • Martin Staufcik  · 技术社区  · 6 年前

    我无法在SQL Server中正确存储特殊的Unicode字符,然后检索它们。

    SQL Server安装程序:

    create table TestUni
    (
        UniCol nvarchar(20)
    )
    
    insert into TestUni values ('😅')
    insert into TestUni values ('電')
    

    现在这个命令返回问号:

    select len(UniCol), UniCol from TestUni
    
    2    ??
    1    ?
    

    当我创建.NET客户端来读取数据时,它还返回问号:

    var sqlConnection = new SqlConnection("***");
    
    sqlConnection.Open();
    
    var sqlCommand = new SqlCommand("select * from TestUni", sqlConnection);
            var reader = sqlCommand.ExecuteReader();
    
    var str = string.Empty;
    
    while(reader.Read())
    {
        str += reader["UniCol"];
    }
    
    File.WriteAllText("d:\\test.txt", str);
    

    文件内容:

    enter image description here

    如何从数据库中正确检索特殊字符?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Jamie Pollard    6 年前

    你需要使用 N 用于指示进入的Unicode值的前缀

    create table TestUni
    (
      UniCol nvarchar(20)
    )
    
    insert into TestUni values ('😅')
    insert into TestUni values ('電')
    insert into TestUni values (N'😅')
    insert into TestUni values (N'電')
    
    select len(UniCol), UniCol from TestUni