【发布时间】:2016-12-07 10:07:23
【问题描述】:
我在 MS SQLServer 上有一个带有 nVarchar 列的表。我正在使用插入语句保存 UTF-8 字符。它被保存为???。如果我通过更新语句使用相同的值更新同一列,它将被正确保存。
关于这里的问题有什么提示吗?使用的排序规则是:SQL_Latin1_General_CP1_CI_AS
【问题讨论】:
标签: sql-server sql-server-2008 utf-8
我在 MS SQLServer 上有一个带有 nVarchar 列的表。我正在使用插入语句保存 UTF-8 字符。它被保存为???。如果我通过更新语句使用相同的值更新同一列,它将被正确保存。
关于这里的问题有什么提示吗?使用的排序规则是:SQL_Latin1_General_CP1_CI_AS
【问题讨论】:
标签: sql-server sql-server-2008 utf-8
显示您的插入语句。有 - 很可能 - 缺少一个 N:
DECLARE @v NVARCHAR(100)='Some Hindi from Wikipedia मानक हिन्दी';
SELECT @v;
结果:Some Hindi from Wikipedia ???? ??????
SET @v=N'Some Hindi from Wikipedia मानक हिन्दी';
SELECT @v;
结果:Some Hindi from Wikipedia मानक हिन्दी
字符串文字前面的N 告诉SQL-Server 将内容解释为unicode(准确地说是ucs-2)。否则会被视为1字节编码的扩展ASCII,无法处理所有字符...
【讨论】:
NVARCHAR 应该总是使用带有N'Some string' 的文字来完成。否则就是赌博……