Как создать индексирование для json в mysql? - PullRequest
0 голосов
/ 03 февраля 2020

у меня есть версия обновления mysql как

выбрать версию ()

вернуть 10.4.11-MariaDB

Я могу создать таблицу типа json, но не удалось создать индексирование в mysql

CREATE TABLE `players` (  
   `id` INT UNSIGNED NOT NULL,
   `player_and_games` JSON NOT NULL,
   `names_virtual` VARCHAR(20) GENERATED ALWAYS AS (`player_and_games` ->> '$.name') NOT NULL, 
   PRIMARY KEY (`id`)
);

я запускаю эту команду, ее возвращение

1 выполненных запросов, 0 успешных, 1 ошибок, 0 предупреждений

Запрос:

CREATE TABLE `players` (
  `id` INT UNSIGNED NOT NULL,
  `player_and_games` JSON NOT NULL,
  `names_virtual` VARCHAR(20) GENERATED ALW...

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '>> '$.name') NOT NULL, 
   PRIMARY KEY (`id`)
)' at line 4

Execution Time : 0 sec
Transfer Time  : 0 sec
Total Time     : 0 sec

Я также использовал mysql официальную документацию, она также возвращает ту же проблему.

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Будьте осторожны - MySQL и MariaDB не находятся в состоянии блокировки выше JSON. В частности, оператор >> существует в одном, а не в другом. (Это просто сокращение от чего-то более многословного.)

1 голос
/ 03 февраля 2020

Попробуйте использовать json_value(). И сгенерированный столбец не может быть объявлен NOT NULL, по-видимому.

CREATE TABLE `players` (  
   `id` INT UNSIGNED NOT NULL,
   `player_and_games` JSON NOT NULL,
   `names_virtual` VARCHAR(20) GENERATED ALWAYS AS (json_value(`player_and_games`, '$.name')), 
   PRIMARY KEY (`id`)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...