当前位置: 代码迷 >> Sql Server >> MSSQL数据库赋值变量的时分没加N,汉字输出是问号,求解决
  详细解决方案

MSSQL数据库赋值变量的时分没加N,汉字输出是问号,求解决

热度:49   发布时间:2016-04-24 09:23:33.0
MSSQL数据库赋值变量的时候没加N,汉字输出是问号,求解决
DECLARE @str NVARCHAR(20)
SET @str = 'SQL数据库'

SELECT @str AS [没N]
--SQL???


SET @str = N'SQL数据库'
SELECT @str AS [有N]
--SQL数据库

--在第一种,变量已赋值的情况下,怎么能让汉子正常输出

------解决思路----------------------
DECLARE @str NVARCHAR(20)
SET @str = 'SQL数据库'
 
SELECT cast(@str as nvarchar(20)) AS [没N]
--SQL???
 
 
SET @str = N'SQL数据库'
SELECT @str AS [有N]

/*
没N
--------------------
SQL数据库

(1 row(s) affected)

有N
--------------------
SQL数据库

(1 row(s) affected)
*/

------解决思路----------------------
如果已经存入实体表中,只能重新存储,你说的变量赋值是没存进去是吧?那把变量转换成nvarchar,
------解决思路----------------------
我这里正好有两个版本的SQL Server,2008中和#1一样都是SQL数据库,2000中没N是SQL数据?
这是SQL解析器的问题。
字符变成?后已经丢失了原始字符的信息,是不可能恢复的。
------解决思路----------------------
无解,编码已经当成乱码被赋到@str了,就算用二进制读出来也是???的二进制
------解决思路----------------------
数据库->属性    这个地方的设置也有关系,如果是SQL_Latin1_General_CP1_CI_AS  也会出问号, 你可以测试下载不同属性数据库下,你的那些代码
------解决思路----------------------
引用:
数据库->属性    这个地方的设置也有关系,如果是SQL_Latin1_General_CP1_CI_AS  也会出问号, 你可以测试下载不同属性数据库下,你的那些代码



Maintenance ->Collation
  相关解决方案