插入后 SQL 代码中的西里尔符号不正确
Posted
技术标签:
【中文标题】插入后 SQL 代码中的西里尔符号不正确【英文标题】:Cyrillic symbols in SQL code are not correctly after insert 【发布时间】:2013-05-21 15:38:35 【问题描述】:我使用 SQL Server 2005,我尝试存储西里尔字符,但我无法通过尝试运行 SQL 代码来使用 SQL Server:
INSERT INTO Assembly VALUES('Македонски парлиамент број 1','','');
或者从 C# 发生同样的问题,但从 SQL Server 插入/更新列它可以正常工作并且可以正常存储。
列的数据类型为nvarchar
。
【问题讨论】:
你必须使用 nvarchar/nchar 数据类型加上 N 前缀:... values(N'парлиамент');
【参考方案1】:
你必须在你的字符串之前添加 N 前缀。
当您隐式声明一个字符串变量时,默认情况下它被视为 varchar。添加前缀 N 表示后面的字符串是 Unicode (nvarchar)。
INSERT INTO Assembly VALUES(N'Македонски парлиамент број 1','','');
这里有一些阅读:
http://databases.aspfaq.com/general/why-do-some-sql-strings-have-an-n-prefix.html
https://msdn.microsoft.com/en-IN/library/ms186939.aspx
What is the meaning of the prefix N in T-SQL statements?
【讨论】:
【参考方案2】:我不确定您是在执行静态存储过程还是脚本,但是当您将文本保存到磁盘时,可能没有正确编码。我遇到了这个问题,通过更正我保存到磁盘以进行 osql 处理的 SQL 的编码,我的问题在 PowerShell 中得到了解决:
Out-File -FilePath "MyFile.sql" -InputObject $MyRussianSQL -Encoding "Unicode" -Force;
& osql -U myuser -P password -i "MyFile.sql";
【讨论】:
以上是关于插入后 SQL 代码中的西里尔符号不正确的主要内容,如果未能解决你的问题,请参考以下文章