MySQL 8 不支持 PASSWORD() 函数的解决办法


最近新安装了 MySQL 8 的版本,一份老代码里某句 SQL:


            SELECT * FROM t_user 
            WHERE uid = 'u0001' 
            AND pwd = PASSWORD('123456')
        

报如下错误:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

原因是 PASSWORD() 函数 在 v5.7.5 之后的版本中已被弃用 查看官方说明

解决方案:
将:
            
                PASSWORD('123456')
            
            
替换为:
            
                CONCAT('*', UPPER(SHA1(UNHEX(SHA1('123456')))))
            
        

这两种方式加密出来的字符串是一样的。

但无论如何,都不应该使用 PASSWORD() 来作为密码加密函数。MySQL 功能手册里一直在声明,它仅供 MySQL 的系统表使用。

参考资料 Reference :
Password Hashing in MySQL

back home