我在php(7.2)中使用sha3哈希,我将继续在MySQL中使用它们,但MySQL还没有支持它们。
如果我编写自己的UDF并调用它,比如说sha3
,但是未来的MySQL版本会添加一个原生的sha3
函数,会发生什么?
为了避免可能的冲突,我可能会将其命名为其他东西,但最终可能会出现任何功能,所以我当然很好奇。
以防万一有人在MySQL中寻找sha3支持,我编写了一个MySQL UDF,它使用的rhash就像本机sha2函数一样正好完全,你可以在这里下载(安装和使用说明在评论中){{3}}
另外,值得注意的是sha3应该比sha2更快(我认为),但我的功能是本机sha2的4倍(生成100,000个哈希),但希望未来的本机sha3将会解决这个问题。
我添加了一个单独的UDF,用于返回没有名为unhex_sha3
的十六进制编码的哈希值,它应该字面上充当unhex(sha3(...
,并且此版本几乎完全是原生速度(与{相比) {1}}),因为我可以避免十六进制编码和背面之间的无意义转换。
https://gist.github.com/BrianLeishman/a0f40e7a0a87a7069c5c56a768ff3179
答案 0 :(得分:3)
避免创建与内置函数同名的UDF或存储函数。 ...
如果您已经创建了具有给定名称的用户定义函数并将MySQL升级到实现具有相同名称的新内置函数的版本,则UDF将变得不可访问。要更正此问题,请使用DROP FUNCTION删除UDF和CREATE FUNCTION以使用不同的非冲突名称重新创建UDF。然后修改任何受影响的代码以使用新名称。
如果新版本的MySQL实现了与现有存储函数同名的内置函数,则有两种选择:重命名存储函数以使用非冲突名称,或更改对函数的调用他们使用模式限定符(即使用schema_name.func_name()语法)。无论哪种情况,请相应地修改任何受影响的代