【问题标题】:mysql UDF return INT instead of STRINGmysql UDF 返回 INT 而不是 STRING
【发布时间】:2016-07-27 12:59:50
【问题描述】:

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

这个函数是在mysql中定义的:

CREATE FUNCTION PHPParse RETURNS STRING SONAME 'php_parser.so'

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

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 查询:

SELECT PHPParse('hello','222') as `date` FROM invoices ;

我得到这个结果:

date:
62656767696e6e696e67
62656767696e6e696e67
62656767696e6e696e67
62656767696e6e696e67
etc...

虽然它应该返回 开始

我哪里错了?

附言 编译命令:

g++  -std=c++11 -fPIC  -shared -I/usr/include/mysql -o /usr/lib64/mysql/plugin/php_parser.so  include/PHPSerializedDataLoader.cpp PHPParse.cc

【问题讨论】:

    标签: mysql c linux udf


    【解决方案1】:

    如果有人感兴趣,可以快速“补丁”转换为字符串:

    SELECT CAST(PHPParse(`serialized_infos`, '22')  AS CHAR CHARACTER SET utf8) as date1 FROM invoices 
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 1970-01-01
      • 2019-10-12
      • 2020-10-19
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多