补充 6-13 《关于SQL SERVER 字段类型char(n) , nchar(n) , varchar(n) , nvarchar(n)》
阅读原文时间:2023年09月02日阅读:7

今天补充一下《关于SQL SERVER 字段类型char(n) , nchar(n) , varchar(n) , nvarchar(n)》类型的区别

虽然两个字符串一样,但是定义的类型不一样,也是不同的,这里用加密来解释

如:

DECLARE @pas VARCHAR(100)='123456789'
DECLARE @pas2 NVARCHAR(100)='123456789'

这两个字符串看着一样的,但是一个是varchar,一个是nvarchar,如果是直接比较,肯定是一样的

如:

可见,两个字符串是一样的,但是,重点来了

先给大家看一下代码:

DECLARE @pas VARCHAR(100)='123456789'

DECLARE @pas2 NVARCHAR(100)='123456789'

IF @pas=@pas2

SELECT 1

SELECT HASHBYTES('SHA2_256',@pas)

SELECT HASHBYTES('SHA2_256',@pas2)

先猜猜结果一样不?答案先给了,肯定不一样,因为字节数不一样,第一个@pas 9*1=9个字节,第二个@pas2 9*2=18个字节

来,直接看结果:

可以看见结果是不一样的,所以在定义的时候要注意,特别是像本文的列子所示

另外,再补充一个知识点:

在对数据做特殊处理的时候一定记得左右去空格,下面给出一个列子供大家参考

可见,下面两个都是一样的类型,但是第二个和第三个多了空格

所以导致结果不一样,至于我怎么知道的,别问,问就是踩过坑

曾经写过一个注册登录,就是因为定义的类型导致的,十分难受

今日补充结束,有问题的小伙伴可以关注留言,我会尽力帮大家解决疑惑

能帮朋友解决问题的记得给个关注支持一下,以后将多多分享SQL SERVER 相关知识