私はMYSQL 5.7を使用していますが、8.0で導入されたメソッドにはアクセスできません。生成された列で関数を使用するには?
そこで私はこのような何かしたい:私は指定されたSQLを実行したときに
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;
は、しかし、それはエラーがスローされます。 [2017-11-01 14:12:41] [HY000][3102] Expression of generated column 'id' contains a disallowed function.
はしても機能が決定論あると思いました。どうやってやるの ?将来的には私は8.0に私のMySQLサーバをアップグレードすることができます場合、私は私のコラム
また多分これが理由であることのためのSQLを変更したくないので、
は、私は私の機能uuid_to_bin
と呼ばれますか? COLLATION 'utf8_bin' is not valid for CHARACTER SET 'binary'
だから私はその部分(関数の本体)をすべてのテーブルで繰り返す必要があります。私はその種のバイナリuuidを生成したい – Vardius