一、总结

1、varchar: 可变长度的非Unicode字符数据.n的值必须在1到8000之间.n是2的话,表示2个字节,所以可以存储2个英文,只能存储1个中文。

nvarchar: 可变长度的Unicode字符数据.n的值必须在1到4000之间.意思就是不管是英文还是中文都按照2个字节来处理。

2、Unicode和非Unicode的区别

Unicode字符集就是为了解决中文而产生的,英文存储一个英文只需要1个字节,但是中文的存储一个汉字需要2个字节。

3、nvarchar类型的字段使用MD5加密后的结果是md5(unicode)类型,

varchar类型的字段使用MD5加密后的结果是md5类型,

所以2中字段类型相同的字符串加密出来的结果是不一样的,这个需要注意一下。

二、操作步骤

1、使用Oracle加密‘jack’字符串

命令:select utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING =>‘jack‘)) from dual;

Oracle对 ‘jack’ 加密后的字符串为:4FF9FC6E4E5D5F590C4F2134A8CC96D1

2、使用SQLServer加密‘jack’字符串

命令:select name ,substring(sys.fn_sqlvarbasetostr(HashBytes(‘MD5‘,name)),3,32) from customer..person  where id=9

SQLServer对 ‘jack’ 加密后的字符串为:fdd311ede98f57ad459c86c08c63f8f4

注:从上面加密后的结果看,SQLServer和Oracle使用MD5对 ‘jack’ 加密后的结果不一致

3、使用网上对MD5加密后的字符串解密看一下

这里提供一个在线解密的网址:https://www.somd5.com/(这个大家可以在网上找,挺多的)

Oracle解密:

SQLServer解密:

注:发现解密后的结果都是 ‘jack’,仔细看可以发现,Oracle的加密类型是md5,SQLServer的加密类型是md5(unicode),突然想到了SQLServer里表的字段类型,赶紧查看

4、查看SQLServer表的字段类型

注:发现name的字段类型是nvarchar的,也就是Unicode字符类型的(上面有做详细解释),所以加密后是md5(unicode)的,问题似乎找到了,赶紧创建一个varchar的测试一下

5、SQLServer里测试字段类型是varchar的加密结果

(1)创建一张per表,name的字段类型是varchar

(2)对这张表name是‘jack’的数据加密

这次加密后是:4ff9fc6e4e5d5f590c4f2134a8cc96d1,发现和Oracle一致了。

6、SQLServer直接对nvarchar字段类型的表装换类型加密看一下结果

命令:select substring(sys.fn_sqlvarbasetostr(HashBytes(‘MD5‘,convert(varchar(20),name))),3,32) from customer..person  where id=9

注:发现也是一致的,所以可以直接对nvarchar类型的字段转换类型来加密,解决加密不一致的问题。

最终问题解决,就是字段类型的问题!!!

原文:https://www.cnblogs.com/jialanyu/p/13091924.html

oracle md5 重复,33-SQLServer和Oracle使用MD5加密字符串不一致的问题相关推荐

  1. oracle删除重复字段数据库,用Oracle的分析函数删除重复的数据,

    用Oracle的分析函数删除重复的数据, 用Oracle的分析函数删除重复的数据 没有主键(Primary Key)约束保护的表格可能会让重复的数据行被插入进来.查找这种重复数据的传统方式是通过GRO ...

  2. oracle判断值是否为0的高数,SQLServer和Oracle的常用函数对比

    数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) ...

  3. [转]SQLServer和Oracle,存储过程区别,常用函数对比

    本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...

  4. sqlserver oracle对比,sqlserver和oracle常用函数对比

    sqlserver和oracle常用函数对比 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S: ...

  5. 一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE

    这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...

  6. mysql数据迁移到sqlserver_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

    这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...

  7. oledb vc访问mdb数据库_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

    这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...

  8. oracle stdevp函数,ORACLE 系统函数与SQLSERVER系统函数的区别是什么

    ORACLE 系统函数与SQLSERVER系统函数的区别是什么 发布时间:2021-03-17 14:40:36 来源:亿速云 阅读:57 作者:Leah 栏目:数据库 这篇文章给大家介绍ORACLE ...

  9. C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)

    转载出处:https://www.cnblogs.com/7tiny/p/7602808.html(仅供个人学习记录) [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是 ...

最新文章

  1. css垂直居中如何实现
  2. 24款非常实用的CSS3工具终极收藏
  3. 猛龙出击•东莞赛区新闻发布会隆重举行,粤港澳大湾区将迎来首场搏击盛宴...
  4. event.srcElement 说明 方法 技巧
  5. win10+64位 安装Theano并实现GPU加速
  6. C# EF6 更新对象
  7. Linux之——命令大全
  8. 模拟美式橄榄球比赛数据(R)
  9. pandas中Category的应用
  10. 离散数学知识点总结(3):等值演算,16个命题定律 / 基础等价式,重言式的替换规则,证明有效性和可满足性的方法
  11. Python判断html的元素,python判断网页元素是否存在的方法
  12. HTML CSS JS 网页设计作业「我的家乡」汉口5页 带留言表单
  13. 用Python写的水仙花数程序,感觉这个也比较好懂
  14. 设置表格列宽 —— 在富文本编辑器中的实现
  15. 以本职工作为挡箭牌推托,久而久之,你就只能原地踏步。
  16. Linux ffs()函数
  17. this.$nextTick
  18. 跟刀客一起追寻昨日的足迹
  19. 屡陷丑闻的 Facebook,试图靠 AI Bot 管住员工的嘴,可能吗?
  20. 电子设计竞赛前的点点滴滴

热门文章

  1. Linux Shell 脚本编程 入门
  2. 大学计算机素质教育认识,试论技术院校中计算机教育与素质教育的关系
  3. 数据结构与算法概念解析
  4. vue下载excel模板文件,excel读取
  5. vue下载excel模板
  6. 软件使用代码签名证书的好处和必要性
  7. 常用可以下载书的网站
  8. java jfm入门_image Java版*图像过滤入门示例及源码模拟绿坝过滤机制 - 下载 - 搜珍网...
  9. Java版色情图像过滤入门示例及源码-0.1.0 (模拟绿坝过滤机制)
  10. CRM代表什么?需要CRM软件的7个理由