补充 6-13 《关于SQL SERVER 字段类型char(n) , nchar(n) , varchar(n) , nvarchar(n)》
今天补充一下《关于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 相关知识
本文来自博客园,作者:酒笙匿清栀,转载请注明原文链接:https://www.cnblogs.com/libo962464/p/16374629.html