gpt4 book ai didi

mysql - 如何在生成的列中使用函数?

转载 作者:行者123 更新时间:2023-12-01 18:47:07 26 4
gpt4 key购买 nike

我使用的是 MYSQL 5.7,但无法访问 8.0 中引入的方法。

因此我想做这样的事情:

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.
还以为功能是 确定性 .我怎样才能做到这一点 ?

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

也可能这是一个原因? COLLATION 'utf8_bin' is not valid for CHARACTER SET 'binary'

最佳答案

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

文字,确定性内置函数 , 并且允许运营商..
子查询、参数、变量、存储函数和 不允许使用用户定义的函数 .

关于mysql - 如何在生成的列中使用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47047690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com