首页 > 解决方案 > 如何在 SQL 数据库中保存 unicode 字符

问题描述

我正在尝试使用 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();
            }
        }

数据库中的结果

在此处输入图像描述

标签: c#sqlsql-server

解决方案


我相信您正在尝试将 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;

回报:

在此处输入图像描述

我们看到 SQL Server Management Studio为列?中的未知字符呈现 a VARCHAR。您需要将您的列转换NVARCHAR为 以使文本按预期呈现。


推荐阅读