使用CAST函数强制转换一个字符串成NVarChar: CAST(N'123' AS NVarChar(10)),
这个函数运行的结果是多少?是否和php中的字符串'123'是相等?我用MD5分别校验CAST(N'123' AS NVarChar(10))的结果和PHP中的字符串'123',他们的MD5居然不一样,这就很奇怪了。我查了些资料都说NVarChar是以Unicode码存储的,但是在PHP中怎么表示NVarChar的值呢,还是需要用函数把字符串'123'转换成Unicode吗?想要的效果是,MSSQL中使用MD5校验CAST(N'123' AS NVarChar(10))的结果等于PHP的md5('123')的结果。感谢大手子们帮忙,谢谢!
php是弱类型的,nvarchar就是字符串。
之所以不一样,要看你的CAST(N'123' AS NVarChar(10))的md5算法,是否包含了结尾多余的\0一起计算的。
这两个结果是不一样的
PRINT HASHBYTES('MD5','123')
PRINT HASHBYTES('MD5',N'123')
而下面是相同的,N就是Nvarchar
PRINT HASHBYTES('MD5','123')
PRINT HASHBYTES('MD5',CAST(N'123' AS VarChar(10)))