当前位置: 首页 > news >正文

酒店微信网站建设免费优化网站

酒店微信网站建设,免费优化网站,局网站建设制度,遵义官网建设最近因为项目的需要,报表中需要对数据进行MD5加密,结果报表系统得出来的sql语句,字符串前都自动带了N,执行时,发现得到的结果跟在数据库中执行的sql(字符串不带N)得的值不一样,最后自…

最近因为项目的需要,报表中需要对数据进行MD5加密,结果报表系统得出来的sql语句,字符串前都自动带了N,执行时,发现得到的结果跟在数据库中执行的sql(字符串不带N)得的值不一样,最后自己测试一下,发现sql server执行md5加密的时候,字符串前带N和不带N的结果确实是不一样的,如下图
在这里插入图片描述

第2个值是自己想要的值,为什么呢?

因为,表创建的时候,字段用的字符类型时varchar,而字符串加上N后,数据类型默认为是 nvarchar了,即加N后代表这个字符串是一个nvarchar类型,在字符串前面加N可以把字符串转换为unicode编码,每个字符串采用双字节的形式存储。所以字符串类型不一致,导致加密得到的结果也不一致。

一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar,varchar是实际内容的长度,而nvarchar占用的全部的存储,所以计算出的结果不同

 alter table table_name alter column name nvarchar(50);

数据库字段改成 nvarchar(50) 之后计算结果就一致了(但是我这里不使用这种方式)

sql server中的varchar和nvarchar有什么区别?

答:
varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

在字符串前面加上 N 代表存入数据库时以 Unicode 格式存储。
N’string’ 表示string是个Unicode字符串.

Unicode 字符串的格式与普通字符串相似,但它前面有一个 N 标识符(N 代表 SQL-92 标准中的国际语言 (National Language))。N 前缀必须是大写字母。例如,‘Michél’ 是字符串常量而 N’Michél’ 则是 Unicode 常量。Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为 Unicode 常量指派当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用 Unicode 数据。

我最终的解决方案是,使用convert()函数,把字符串前加N的转为varchar()字符类型,如下图:
在这里插入图片描述

sql语句:

select upper(substring(sys.fn_sqlvarbasetostr(hashbytes('MD5',
(select N'00000000000000000011'  + char(13) + char(10) +
N'0001A110000000007LBY' + char(13) + char(10) +
N'2022-12' + char(13) + char(10) +
N'750'))),3,32)) as aunionselect upper(substring(sys.fn_sqlvarbasetostr(hashbytes('MD5',
(select '00000000000000000011'  + char(13) + char(10) +
'0001A110000000007LBY' + char(13) + char(10) +
'2022-12' + char(13) + char(10) +
'750'))),3,32)) as a
union all
select upper(substring(sys.fn_sqlvarbasetostr(hashbytes(N'MD5',(select convert(varchar(20), N'00000000000000000011') + char(13) + char(10) +convert(varchar(20), N'0001A110000000007LBY') + char(13) + char(10) +convert(varchar(20), N'2022-12') + char(13) + char(10) + convert(varchar(20), N'750')))), 3, 32)) as a
http://www.shuangfujiaoyu.com/news/19328.html

相关文章:

  • 新吴区推荐做网站电话长沙网站seo外包
  • 怎样创业白手起家开公司seo网站推广公司
  • 沭阳网站建设shy1z爱站网长尾关键词
  • 中信建设有限责任公司招投标网站搜索引擎优化
  • 门户网站快速制作哈尔滨百度推广公司
  • b2c有哪些电商平台网址百度关键词优化企业
  • 网站开发项目职责怎么优化电脑系统
  • access2003做网站四年级摘抄一小段新闻
  • 江西赣州网站建设怎样做好销售和客户交流
  • 专业做财务公司网站seo新站如何快速排名
  • 网站首页有哪些内容国家市场监督管理总局
  • 苏州网站建设 江苏千渡热点事件营销案例
  • 做商城网站系统河北seo技术交流
  • 临海企业网站建设公司全国疫情实时资讯
  • 网站建设实施过程百度网盘下载的文件在哪
  • 做网站找我图片新闻平台发布
  • 专业做网站方案优化网站排名软件
  • 技术支持 东莞网站建设家装seo综合查询平台官网
  • 免费看电视剧的网站有哪些软文撰写
  • 网站内的链接怎么做怎么在百度上推广自己的产品
  • 网站建设-易速通科技百度搜索优化关键词排名
  • 男的做直播网站google搜索网址
  • 三合一网站开发架构竞价排名服务
  • 男人的天堂哔哩哔哩seo快速排名培训
  • 汉南城乡建设局网站seo入门教程seo入门
  • 做网站如何赚钱知乎9个成功的市场营销案例
  • 做网站最好的公司网页设计软件有哪些
  • 珠海软件公司排名下列关于seo优化说法不正确的是
  • 武汉网站托管公司关键词长尾词优化
  • 少儿培训河南整站关键词排名优化软件