首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql UDF返回INT而不是STRING

mysql UDF返回INT而不是STRING
EN

Stack Overflow用户
提问于 2016-07-27 20:59:51
回答 1查看 211关注 0票数 0

我在使用mysql 5.7.13 (Linux)中的用户定义函数时遇到了问题:

此函数在mysql中使用以下命令定义:

代码语言:javascript
复制
CREATE FUNCTION PHPParse RETURNS STRING SONAME 'php_parser.so'

C (& C++)文件如下所示:

代码语言:javascript
复制
my_bool PHPParse_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void PHPParse_deinit(UDF_INIT *initid);
char* PHPParse(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error);


my_bool PHPParse_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
  initid->maybe_null = 1;
  if (args->arg_count != 2 || args->arg_type[0] != STRING_RESULT || args->arg_type[1] != STRING_RESULT)
  {
    strcpy(message,"PHPParse (p_field_name, p_php_parser_string)");
    return 1;
  }
  initid->max_length=256;
  return 0;
}


char* PHPParse(UDF_INIT *initid MY_ATTRIBUTE((unused)), UDF_ARGS *args, char *result, unsigned long *length,char *is_null, char *error MY_ATTRIBUTE((unused)))
{
    *is_null = 0;
    memcpy(result,"begginning",10);
    *length= (unsigned long)(10);
    return result;
}

如果我使用以下SQL查询:

代码语言:javascript
复制
SELECT PHPParse('hello','222') as `date` FROM invoices ;

我得到的结果是:

代码语言:javascript
复制
date:
62656767696e6e696e67
62656767696e6e696e67
62656767696e6e696e67
62656767696e6e696e67
etc...

虽然它应该返回乞讨

我哪里错了?

P.S编译命令:

代码语言:javascript
复制
g++  -std=c++11 -fPIC  -shared -I/usr/include/mysql -o /usr/lib64/mysql/plugin/php_parser.so  include/PHPSerializedDataLoader.cpp PHPParse.cc
EN

回答 1

Stack Overflow用户

发布于 2016-07-28 00:36:38

如果有人感兴趣,一个快速的“补丁”是转换为string:

代码语言:javascript
复制
SELECT CAST(PHPParse(`serialized_infos`, '22')  AS CHAR CHARACTER SET utf8) as date1 FROM invoices 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38613708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档