varchar,nvarchar不同呀。小心出错
生活随笔
收集整理的這篇文章主要介紹了
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?行)
*/
本來沒有這個問題,但是接口使用方傳過來的字串編碼錯誤,導致亂碼。
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?行)
*/
總結
以上是生活随笔為你收集整理的varchar,nvarchar不同呀。小心出错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据hibernate拦截器实现可配置日
- 下一篇: 小心ASP.NET 2.0 的Skin特