为什么MySQL UDF返回随机数据?
有关发生故障的系统的信息: OS:Debian 8.1 64位-MySQL版本:5.5.44-GCC:4.9.2 我正在创建一个简单的UDF函数,它将返回字符串helloworld。问题是,它将返回Hello World,concat,有一个长的随机二进制字符串,其中包含大小可变的随机数据,它将在执行过程中不断变化 你好,世界杯 我将UDF共享库包含到为什么MySQL UDF返回随机数据?,mysql,c,udf,Mysql,C,Udf,有关发生故障的系统的信息: OS:Debian 8.1 64位-MySQL版本:5.5.44-GCC:4.9.2 我正在创建一个简单的UDF函数,它将返回字符串helloworld。问题是,它将返回Hello World,concat,有一个长的随机二进制字符串,其中包含大小可变的随机数据,它将在执行过程中不断变化 你好,世界杯 我将UDF共享库包含到/usr/lib/mysql/plugin中,并在mysql中创建了函数:创建函数hello\u world返回字符串SONAME“hello\u
/usr/lib/mysql/plugin
中,并在mysql中创建了函数:创建函数hello\u world返回字符串SONAME“hello\u world.so”代码>
一切都很顺利,执行函数时出现问题:
示例输出:
| Hello World ;, �� ����� x
� $ ���0 FJ
V � ?; D ��� A�C
d
Q �� �
���o |
有什么问题吗
谢谢。MySQL没有在C字符串中使用空终止符。UDF接收一个参数unsigned long*length
,您必须对此进行设置
*length = strlen(hello);
return hello;
您没有正确地调用UDF调用。Per:
主函数xxx()
的返回值是函数值,例如
长和双功能。字符串函数应返回
指向结果的指针,并将*length设置为结果的长度(以字节为单位)
返回值。例如:
memcpy(result, "result string", 13);
*length = 13;
该文档还有很多内容。请检查:@VincentRamdhanie他使用的是字符串文字,它会自动以null结尾。根据Great,您似乎没有设置长度!它现在正在返回预期值。非常感谢。我也尝试过你的解决方案。它不会返回预期值。它需要将字符串memcpy到结果指针中。谢谢你,没必要。文档中说,如果函数将结果存储在另一个缓冲区中,它应该返回指向该缓冲区的指针。如果您试图返回本地字符串,则只需使用memcpy
,因为函数返回时它会被销毁。但您的示例返回一个指向字符串文本的指针,该字符串文本未被销毁。
*length = strlen(hello);
return hello;
memcpy(result, "result string", 13);
*length = 13;