Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当MySQL添加一个与您自己同名的函数时会发生什么?_Mysql_Mysql Udf - Fatal编程技术网

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

当MySQL添加一个与您自己同名的函数时会发生什么?,mysql,mysql-udf,Mysql,Mysql Udf,我在php(7.2)中使用sha3哈希,我打算在MySQL中继续使用它们,但MySQL还不支持它们 如果我编写自己的UDF并调用它,比如说,sha3,但后来某个MySQL版本添加了一个本机的sha3函数,会发生什么 为了避免可能的冲突,我可能会给它取个别的名字,但这最终可能会发生在任何函数上,所以我当然很好奇 为了防止有人在MySQL中寻找sha3支持,我已经编写了一个MySQL UDF,它使用rhash来实现这一点,它的功能与本机sha2功能完全相同,您可以在这里下载(安装和使用说明在注释中

我在php(7.2)中使用sha3哈希,我打算在MySQL中继续使用它们,但MySQL还不支持它们

如果我编写自己的UDF并调用它,比如说,
sha3
,但后来某个MySQL版本添加了一个本机的
sha3
函数,会发生什么

为了避免可能的冲突,我可能会给它取个别的名字,但这最终可能会发生在任何函数上,所以我当然很好奇


为了防止有人在MySQL中寻找sha3支持,我已经编写了一个MySQL UDF,它使用rhash来实现这一点,它的功能与本机sha2功能完全相同,您可以在这里下载(安装和使用说明在注释中)

另外,值得注意的是,sha3应该比sha2快(我认为),但我的函数速度是原生sha2的4倍(生成100000个哈希时),但希望未来的原生sha3能够解决这个问题


我添加了一个单独的UDF,用于返回没有十六进制编码的散列,名为
unhex\u sha3
,它应该实际充当
unhex(sha3(…
),这个版本几乎完全是本机速度(与
sha2
),因为我可以避免十六进制编码和返回之间的无意义转换

来自指南:

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

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

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


好吧,那太快了,当然我试着用谷歌搜索它,但我的措辞让我失败了……谢谢!当它允许我时,我会标记为答案:)实际上,在我的具体用例中,这是非常理想的行为,因为我可以使用与
sha2
相同的参数顺序将其命名为
sha3
,当更新到来时,将使用本机函数,而不是在我的答案中添加UDF:)