mysql UDF 上列的数据被截断

Posted

技术标签:

【中文标题】mysql UDF 上列的数据被截断【英文标题】:Data truncated for column on mysql UDF 【发布时间】:2014-02-11 16:53:40 【问题描述】:

我正在用 C 语言编写我的第一个用户定义函数,以便从 mysql 调用。代码很简单:

char *getKey(UDF_INIT *initid __attribute__((unused)),
    UDF_ARGS *args, char *result, unsigned long *length,
    char *is_null, char *error __attribute__((unused)))

    const char *word=args->args[0];
    strcpy(result,"EOOOOOOOO");

    return result;

我已经编译并加载它没有问题。

CREATE FUNCTION getKey RETURNS STRING SONAME 'udf_key.so';

为了测试它,我在插入查询中调用它:

INSERT INTO `seed4c`.`users` (`iduser`,`userscol`) VALUES (1,getkey('aa'));

userscol 是一个 Varchar(45),因此应该有足够的空间用于返回的字符串。我收到警告

1 row(s) affected, 1 warning(s): 1265 Data truncated for column 'userscol' at row 1

在表格中进行选择时,该字段具有预期值 (EOOOOOOOO) 和一些奇怪的字符,非字母数字。

我做错了什么?

【问题讨论】:

您没有将*length 设置为结果的长度。 【参考方案1】:

添加:

*length = strlen(result);

见documentation

【讨论】:

以上是关于mysql UDF 上列的数据被截断的主要内容,如果未能解决你的问题,请参考以下文章

通过 rodbc 写入 mysql 数据库的 posix 被截断

mysqljson存储被截断,没有报错

MySQL Load Data Infile - Nulls 导致错误 1265:数据被截断

MYSQL 清空表和截断表

在枚举字段(DB)中插入字符串值(java)时获取“列的数据被截断”

[MySQL]--MySQL表中某个列插入数据总被截断,报编码方式的语法错误,实际是column的not null属性和更改编码语法导致的冲突。