HSQLDB中关于MD5的文档有些稀缺,但是我已经按照这些说明来启用md5-ing我的密码:
CREATE FUNCTION md5(VARBINARY(128))
RETURNS VARBINARY(226)
LANGUAGE JAVA
DETERMINISTIC
NO SQL
EXTERNAL NAME 'CLASSPATH:org.hsqldb.lib.MD5.digest'
现在,当我尝试更新密码时:
UPDATE worker SET password = md5('pass123') WHERE wid=1
我收到以下错误:
java.sql.SQLException: routine signature not found for: PUBLIC.MD5(CHARACTER)
我对sql不是很熟悉,所以我不确定我在哪里犯了错误。
您需要一个带有字符串而不是二进制的函数签名。
CREATE FUNCTION md5(VARCHAR(128), VARCHAR(10))
RETURNS VARCHAR(256)
LANGUAGE JAVA
DETERMINISTIC
NO SQL
EXTERNAL NAME 'CLASSPATH:org.hsqldb.lib.MD5.encode'
并使用固定的编码参数调用该函数:
UPDATE worker SET password = md5('pass123', 'ISO-8859-1') WHERE wid=1