varchar,nvarchar不同呀。小心出错
今天调程序,执行SQL老是报错。最终发现是 varchar 和 nvarchar 造成的。郁闷。
本来没有这个问题,但是接口使用方传过来的字串编码错误,导致乱码。
本来没有这个问题,但是接口使用方传过来的字串编码错误,导致乱码。
CREATE TABLE [TEST] (
[nn] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
CONSTRAINT [PK_TEST] PRIMARY KEY CLUSTERED
(
[nn]
) ON [PRIMARY]
) ON [PRIMARY]
GO
select * from TEST
insert into TEST(nn)
values(N'BSS?ê?§ID')
insert into TEST(nn)
values(N'BSSÕÊ»§ID')
/*
服务器: 消息 2627,级别 14,状态 1,行 1
违反了 PRIMARY KEY 约束 'PK_TEST'。不能在对象 'TEST' 中插入重复键。
语句已终止。
*/
declare @s nvarchar(50)
,@s2 nvarchar(50)
select @s =N'BSS?ê?§ID' , @s2 = N'BSSÕÊ»§ID'
select 1 where @s=@s2
select 1 where N'BSS?ê?§ID'=N'BSSÕÊ»§ID'
/*
(所影响的行数为 0 行)
(所影响的行数为 0 行)
*/
declare @s varchar(50)
,@s2 varchar(50)
select @s =N'BSS?ê?§ID' , @s2 = N'BSSÕÊ»§ID'
select 1 where @s=@s2
select 1 where N'BSS?ê?§ID'=N'BSSÕÊ»§ID'
/*
(所影响的行数为 1 行)
(所影响的行数为 0 行)
*/
[nn] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
CONSTRAINT [PK_TEST] PRIMARY KEY CLUSTERED
(
[nn]
) ON [PRIMARY]
) ON [PRIMARY]
GO
select * from TEST
insert into TEST(nn)
values(N'BSS?ê?§ID')
insert into TEST(nn)
values(N'BSSÕÊ»§ID')
/*
服务器: 消息 2627,级别 14,状态 1,行 1
违反了 PRIMARY KEY 约束 'PK_TEST'。不能在对象 'TEST' 中插入重复键。
语句已终止。
*/
declare @s nvarchar(50)
,@s2 nvarchar(50)
select @s =N'BSS?ê?§ID' , @s2 = N'BSSÕÊ»§ID'
select 1 where @s=@s2
select 1 where N'BSS?ê?§ID'=N'BSSÕÊ»§ID'
/*
(所影响的行数为 0 行)
(所影响的行数为 0 行)
*/
declare @s varchar(50)
,@s2 varchar(50)
select @s =N'BSS?ê?§ID' , @s2 = N'BSSÕÊ»§ID'
select 1 where @s=@s2
select 1 where N'BSS?ê?§ID'=N'BSSÕÊ»§ID'
/*
(所影响的行数为 1 行)
(所影响的行数为 0 行)
*/
QQ:273352165
evlon#126.com
转载请注明出处。