如何在SQL数据库中保存Unicode字符

时间:2019-01-13 14:47:46

标签: c# sql sql-server

我正在尝试使用ADO.NET类将ThinSpace(\ u2009)保存到数据库中,但是却出现“?” db中的符号代替ThinSpace。我以UTF8格式保存到db的字符串。

        var content = "This is a test";

        byte[] bytes = Encoding.Default.GetBytes(content);
        content = Encoding.UTF8.GetString(bytes);

        content = content.Replace(' ', '\u2009');

        using (var con = new SqlConnection(connStr))
        {
            con.Open();

            using (var com = new SqlCommand("insert into Messages values ('" + content + "')", con))
            {
                com.ExecuteNonQuery();
            }
        }

数据库结果

enter image description here

2 个答案:

答案 0 :(得分:3)

我相信您正在尝试将unicode插入VARCHAR列中。下面的SQL:

CREATE TABLE MessageBodies
(
     NVARCHARText NVARCHAR(255),
     VARCHARText VARCHAR(255)
);

DECLARE @Text AS NVARCHAR(MAX) = NCHAR(2009);

INSERT INTO UnicodeInserts
VALUES (@Text, @Text);

SELECT
    *
FROM 
    MessageBodies;

返回:

enter image description here

我们看到SQL Server Management Studio在?列中为未知字符呈现了一个VARCHAR。您需要将列转换为NVARCHAR,文本才能按预期呈现。

答案 1 :(得分:2)

这可能会有所帮助:

using (var com = new SqlCommand("insert into Messages values (@content)", con))
{
    var param = new SqlParameter("@content", SqlDbType.NVarChar);
    param.Value = content;
    com.Parameters.Add(param);
    com.ExecuteNonQuery();
}

您的目标列数据类型必须为NCHAR或NVARCHAR