关于SQL Server中变量前加上 N与其他使用情况解析

插入、更新数据

当原始数据中有中文的时候插入到SQL server数据库中会产生中文乱码,解决方法为:

第一步将需要存储中文的字段设置为nvarchar类型

 alter table Test_Info alter column name nvarchar(50)

第二步在插入是数据前加N:

insert into Test_Info(name) values(N'猫')

注意两者缺一不可,否则都会导致中文乱码现象的出现!

加N后代表这个字符串是一个nvarchar类型,在字符串前面加N可以把字符串转换为unicode编码,每个字符串采用双字节的形式存储,这样就不会初选中文乱码现象

查询

完成上一步后不会出现存储中文乱码现象,但是在检索数据时依然会出现中文无法检索的现象。解决方法是在一个常量前加上N

--如果不加N则无法正确返回name为猫的数据
select * from Test_Info where name = N'猫'

变量中含有中文

更多的情况下我们需要通过变量来进行查询,而变量中含有中文,那么怎样在SQL 存储过程、自定义函数或者脚本的变量前加上 N呢?

以下使用一个存储过程举例

create proc test_proc
(@name nvarchar(250),
 @enddateperiod date)
as
select * from  Test_Info
where name=N''+@name+''
and [date]<= @enddateperiod
and [type]<>'Brand'

和一般的存储过程改动的部分主要有两个,一是定义变量的时候要定义为nvarchar类型,二是通过 N’’+变量+’’ 在存储过程的变量前加上 N
注意两者缺一不可,否则都会导致查询不出正确的结果!

同时你也可以:

create proc test_proc
(@name nvarchar(250),
 @enddateperiod date)
as
DECLARE @SQL NVARCHAR(100)
SET @SQL='select * from  Test_Info where name=N'''+@name+''''
EXEC (@SQL)

不过这种办法在有多个变量+字符常量的情况下书写非常麻烦。

我的个人博客:http://smilecoc.vip/
个人公众号:Smilecoc的杂货铺,欢迎关注!
在这里插入图片描述

你可能感兴趣的:(SQL,乱码,数据库)