у меня есть эта таблица:
CREATE TABLE `datacollector` (
`id` binary(16) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`processed` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N',
`processed_at` timestamp NULL DEFAULT NULL,
`request` json NOT NULL,
`response` json NOT NULL,
`response_date` timestamp GENERATED ALWAYS AS (from_unixtime(json_unquote(json_extract(`response`,_utf8mb4'$.date')))) VIRTUAL NULL,
`sha224` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`available_for` json NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_sha224` (`sha224`),
KEY `created_at` (`created_at`) /*!80000 INVISIBLE */,
KEY `cmoa` (`created_at`,`processed`) /*!80000 INVISIBLE */,
KEY `response_date` (`response_date`) /*!80000 INVISIBLE */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Я использую триггер, который создает массив строк в available_for
. Теперь я хотел бы создать индекс для available_for
.
Я уже пробовал
ALTER TABLE `hwtools`.`datacollector`
ADD INDEX `available_for_idx` ((CAST(json_unquote(available_for) AS UNSIGNED ARRAY)));
или
ALTER TABLE `hwtools`.`datacollector`
ADD INDEX `available_for_idx` ((CAST(available_for AS UNSIGNED ARRAY)));
, что всегда дает мне ошибку.
JSON, который хранится в available_for
, выглядит как '["getUserInfo", "stashClient"]'
.
Как я могу теперь создать правильный индекс с последним MySQL 8?
Спасибо за ваш вклад в мою проблему.