首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在生成的列中使用函数?

问如何在生成的列中使用函数?
EN

Stack Overflow用户
提问于 2017-11-01 03:15:52
回答 1查看 3.4K关注 0票数 10

我使用的是MySQL5.7,我无法访问8.0中引入的方法。

因此,我想做这样的事情:

代码语言:javascript
复制
CREATE FUNCTION uuid_to_bin(uuid CHAR(36))
  RETURNS BINARY(16) DETERMINISTIC
  RETURN concat(
      substr(unhex(replace(uuid, '-', '')), 7, 2),
      substr(unhex(replace(uuid, '-', '')), 5, 2),
      substr(unhex(replace(uuid, '-', '')), 1, 4),
      substr(unhex(replace(uuid, '-', '')), 9, 8));

CREATE TABLE `example` (
  `id`        BINARY(16) GENERATED ALWAYS AS (uuid_to_bin(document->>'$.id')) STORED NOT NULL,
  `document`  JSON                                                                   NOT NULL,
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8
  COLLATE = utf8_bin;

但是,当我运行给定的sql时,它会引发一个错误:[2017-11-01 14:12:41] [HY000][3102] Expression of generated column 'id' contains a disallowed function.

即使函数是deterministic.我怎么能这么做?

我调用了函数uuid_to_bin,因为如果将来我能够将MYSQL服务器升级到8.0,我不想更改列的sql

也许这也是原因之一?COLLATION 'utf8_bin' is not valid for CHARACTER SET 'binary'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 10:47:52

https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html生成的列表达式必须遵守以下规则。如果表达式包含不允许的构造,则会发生错误。

文字,确定性内建函数和运算符是允许的。子查询、参数、变量、存储函数和用户定义函数不允许.

您可能无法在文档中逐字找到最后一个。然而,创建函数页说

创建函数语句用于创建存储的函数和可加载的函数。

而上面的另一页则明确指出:

不允许存储函数和可加载函数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47047690

复制
相关文章

相似问题

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