我正在尝试使用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();
}
}
数据库结果
答案 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;
返回:
我们看到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