【发布时间】:2014-05-13 14:59:02
【问题描述】:
我正在使用 .Net 的自定义库来访问 sql 服务器。
这个库正在服务器中执行这个查询:
exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)',
@const795=1803496, @const796='ÄÅÉæÆôöòÇ Münchenß дие Таль'
结果:
Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß ??? ????
如果我手动执行这个查询:
INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (1803496,N'ÄÅÉæÆôöòÇ Münchenß дие Таль')
结果:
Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß дие Таль
N'INSERT INTO 不应该将参数存储在Unicode编码中吗?为什么第二个查询保存“дие Таль”好而第一个查询不保存?
第 2 列是 nvarchar 类型,列的排序规则是 Latin1_General_CI_AS。
另一方面,我还有另一个问题,因为库确实在发送:
exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (@const795, @const796) ',N'@const795 int,@const796 nvarchar(50)',
@const795=1803496, @const796= 'ÄÅÉæÆôöòÇ Münchenß ??? ????'
用问号代替俄语字符。我知道这是因为我使用 SQL 分析器“嗅探”来自库的查询。
从库中调试查询我可以看到这个“дие Таль”字符的正确值,直到将查询发送到数据库。但是 sql profiler 得到“??? ??????”人物·为什么会这样?
【问题讨论】:
标签: sql-server unicode character insert-into