MD5

和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP

这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果根据需要存储到数据库中。

但在某些情况下,可能需要在数据库端计算 MD5 和 SHA1 哈希值,比如说在存储过程或自定义函数内部。开源数据库 MySQL

就提供类似这样的内置函数,以下语句就可以分别显示字符串 “12345” 的 MD5 和 SHA1 值,返回结果为字符串型:

SELECT md5('12345');

SELECT sha1('12345');

但 SQL

Server 中没有直接提供类似这样的函数。在 SQL Server 2000

中,如果需要加密可以使用未文档化的 pwdencrypt()和 pwdcompare() 函数来加密数据和比较结果,加密方式是微软自己的算法,随着

SQL Server 版本的升级,函数的加密结果可能也会有所不同。

不过在 SQL

Server 2005 中,微软提供了一个函数 hashbytes() 可以用来计算一个字符串的

MD5 和 SHA1 值,以下语句分别获得字符串 “12345” 的 MD5 和 SHA1:

SELECT hashbytes('MD5', '12345') ;

SELECT hashbytes('SHA1', '12345') ;

hashbytes() 函数的返回结果是 varbinary 型,也就是以 0x 开头 16

进制形式的二进制数据,不过通常情况下,我们需要的都是字符串型的数据,很多人首先想到的可能就是用 CAST 或 Convert

函数将varbinary 转换为 varchar,但这样转换后的结果会是乱码,正确转换 varbinary 可变长度二进制型数据到

16 进制字符串应该使用系统内置函数sys.fn_VarBinToHexStr(),如下所示:

SELECT sys.fn_VarBinToHexStr(hashbytes('MD5', '12345'))

sys.fn_varBinToHexStr() 函数只在 SQL Server 2005 中有效,在 SQL Server 2000

中实现相同功能使用系统扩展存储过程:master..xp_varBinToHexStr 。

最近正在升级一个程序,使其支持多数据库。

原来的程序数据库为SQL Server,所以使用SQL Server 的“导入和导出数据”功能将一个 SQL Server

数据库转换成了Access数据库,但其中发现了一些问题,但也找到了解决方案,一并记录于此:

1、转换程序会将SQL Server的视图转换成表,而不是Access的查询;

2、在为字段设置默认值为空字符的时候,SQL Server用‘’(空单引号),而Access用“”(空双引号);

3、Access中没有GetDate()函数,应该使用Now()函数代替;

4、Access没有SQL Server用来获取客户端机器名的host_name()函数;

5、Access中没有Case When Then语句,但可以用IIF()函数模拟实现功能;

6、发现:Access使用的是Visual Basic的语言结构和函数;

7、转换程序会正确转换SQL Server字段的 IS NULL 属性;

8、Access也支持多字段的索引,只是设置方法有点特别(参见帮助);

9、SQL Server中bit型的1、0值,在Access中为True和False;

10、在Access中使用多个LEFT JOIN这样的语句时,必须用括号做相关的界定;

11、Access的SQL没有注释语句,SQL Server的无法通用;

12、一条Insert语句在Access查询中正常运行,但在程序中出现“Insert Into

语句的语法错误”,后来发现原来是语句中的一个列名是Access的关键字(用[]界定可解决问题),但奇怪的是将该语句放置到Access的查询中执行却不会出错;

13、SQL Server 的 image 类型字段被转移为 Access 的 OLE 对象类型。

需要对转换后的Access数据库进行以下项目的检查,以确保与SQL

Server一致:

1、主键。转换后的Access数据库都没有主键,需自己设置;

2、自增字段。转换程序会将SQL Server的自增字段转换为数字型,需手动修改为Access的“自动编号”类型;

3、默认值。转换程序不会转换SQL Server中设置的默认值,需手动设置;

4、bigint型字段。转换程序会将SQL

Server的bigint转换为小数,须手动调整为Access的整型或长整型;

5、索引。转换程序不会转换索引,需手动在Access中建立索引。

在Delphi下,想让程序同时支持Access及SQL

Server,需注意以下方面:

1、

在Access中使用 SELECT * FROM Books WHERE RegDate = ‘2007-5-1′

是会出现“标准表达式中数据类型不匹配”这样的错误的(RegDate是日期型),必须使用SELECT * FROM Books

WHERE RegDate = #2007-5-1# 或 SELECT * FROM Books WHERE RegDate =

CDate(’2007-5-1′);

但在Access中,Insert、delete和update中使用单引号界定日期却是可以正常执行的。

2、尽量不要使用SQL Server的bigint类型,尤其该字段是自增的情况下;

3、Access的varchar(文本)型最大只有255,所以如果一个文本型字段大于255时,最好定义成备注型(Access中)或text型(SQL

Server中);

4、在Access中一般会出现如下错误:不正常地定义参数对象,提供了不一致或不完整的信息。将相应Query的ParamCheck设为False即可;

5、Access中的逻辑值在库中为-1和0,而SQL Server中为1和0,所以写BoolField =

1这样的语句有兼容性问题,应该改为BoolField <>

0;

6、在Access中有主键的Query才可更新,而SQL Server无此要求。

---------------SQL标量值函数

CREATE FUNCTION

MD5

(

@url

varchar(500)

)

RETURNS

varchar(50)

AS

BEGIN

declare @key varchar(50)

SELECT

@key=Replace(sys.fn_VarBinToHexStr(hashbytes('MD5',

@url)),'0x','')

RETURN @key

END

GO

mysql md5 sha1_SQL Server 数据库中的 MD5 和 SHA1相关推荐

  1. mysql md5 sha1_SQL Server 数据库中的 MD5 和 SHA1加密算法

    MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果 ...

  2. SQL Server 数据库中的 MD5 和 SHA1加密算法

    MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果 ...

  3. SQL Server 数据库中的 MD5 和 SHA1

    MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果 ...

  4. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

  5. mysql查询加伪列_SQL Server数据库中伪列及伪列的含义详解

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...

  6. mysql raiserror_sql server数据库中raiserror函数的用法

    server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror的常用格式如下: r ...

  7. mysql raiserror_sql server数据库中raiserror函数用法的详细介绍

    sql server数据库中raiserror函数的用法 server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误 ...

  8. 如何在SQL Server数据库中加密数据

    如何在SQL Server数据库中加密数据 为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名.密码.信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条 ...

  9. ExcelToDatabase:批量导入Excel文件到MySQL/Oracle/SQL Server数据库的自动化工具

    ExcelToDatabase:批量导入Excel到MySQL/Oracle/SQL Server数据库的自动化工具 简介 ExcelToDatabase 是一个可以批量导入excel到mysql/o ...

最新文章

  1. Servlet--01--概念
  2. 扬州ns服务器维修视频,NS连接服务器报错问题解决方法--给遇到同样问题的盆友...
  3. c++判断一个数字是否为buzz number的算法(附完整源码)
  4. 计算机进去pe怎么设置用户,电脑密码怎么设置,教您设置电脑开机密码
  5. java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例
  6. uint32_t 是常数吗_UINT_MAX常数,带C ++示例
  7. mysql 四种存储引擎
  8. C语言,期末复习之穷举法鸡兔同笼问题
  9. 学位论文检测系统的说明与修改
  10. 嵌入式MicroFlighter 之STM32F103学习——编写第一个STM32程序
  11. PyTorch实战福利从入门到精通之九——数据处理
  12. DPG图片压缩技术和webp图片格式
  13. 使用系统视图发现SQL Server实例信息
  14. 凯恩帝k1000ti参数设置_凯恩帝数控怎么修改参数
  15. python 将中文变为拼音_python如何使用pypinyin将中文转换为拼音,详细介绍
  16. CSS 小技巧:如何保留 hover 的状态?
  17. 学习shell推荐书籍清单
  18. 【代码开发】neuron_poker安装及简单使用
  19. zzulioj1008: 美元和人民币
  20. 换了新的JDK后,Eclipse打不开

热门文章

  1. FY-4A/LPW产品4km经纬度查找表生成代码-风云四号
  2. PCBSD: Intel显卡上使用宽屏分辨率
  3. 《操作系统》- 操作系统的基本概念
  4. 基于新型战争策略优化算法的光伏模型优化(Matlab代码实现)
  5. 收敛的几何级数与flash过渡动画
  6. 文件管理软件,将文件按名称归类移动到另一个文件夹中
  7. 网易游戏2011校园招聘
  8. Ubuntu 22.04. 安装微信
  9. 南部东方国际学校庆祝“六一”儿童节文艺表演
  10. photoshop cs6制备背景透明的png文件