我使用的是MySQL5.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.
即使函数是deterministic.我怎么能这么做?
我调用了函数uuid_to_bin,因为如果将来我能够将MYSQL服务器升级到8.0,我不想更改列的sql
也许这也是原因之一?COLLATION 'utf8_bin' is not valid for CHARACTER SET 'binary'
发布于 2017-11-01 10:47:52
https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html生成的列表达式必须遵守以下规则。如果表达式包含不允许的构造,则会发生错误。
文字,确定性内建函数和运算符是允许的。子查询、参数、变量、存储函数和用户定义函数不允许.
您可能无法在文档中逐字找到最后一个。然而,创建函数页说
创建函数语句用于创建存储的函数和可加载的函数。
而上面的另一页则明确指出:
不允许存储函数和可加载函数。
https://stackoverflow.com/questions/47047690
复制相似问题