当MySQL添加一个与您自己的名称相同的函数时会发生什么?

时间:2018-02-23 19:10:35

标签: mysql mysql-udf

我在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

1 个答案:

答案 0 :(得分:3)

来自function name resolution指南:

  

避免创建与内置函数同名的UDF或存储函数。   ...

     
      
  • 如果您已经创建了具有给定名称的用户定义函数并将MySQL升级到实现具有相同名称的新内置函数的版本,则UDF将变得不可访问。要更正此问题,请使用DROP FUNCTION删除UDF和CREATE FUNCTION以使用不同的非冲突名称重新创建UDF。然后修改任何受影响的代码以使用新名称。

  •   
  • 如果新版本的MySQL实现了与现有存储函数同名的内置函数,则有两种选择:重命名存储函数以使用非冲突名称,或更改对函数的调用他们使用模式限定符(即使用schema_name.func_name()语法)。无论哪种情况,请相应地修改任何受影响的代

  •