为什么MySQL 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

有关发生故障的系统的信息:

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 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;