MySQL 8.0.13: значение по умолчанию как uuid не работает - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь установить значение по умолчанию как UUID () в MySQL версии 8.0.13. Но при успешном выполнении значение по умолчанию сбрасывается в NOT NULL.

MySQL версия:

Вот мой скрипт CREATE TABLE

CREATE TABLE `session` (
  `id` binary(16) NOT NULL DEFAULT (UUID_TO_BIN(UUID(), TRUE)),
  `start_timestamp` timestamp NOT NULL,
  `end_timestamp` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

вывод журнала при генерации таблицы: SQL script was successfully applied to the database.

Пост-выполнение определения TABLE:

CREATE TABLE `session` (
  `id` binary(16) NOT NULL,
  `start_timestamp` timestamp NOT NULL,
  `end_timestamp` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Я не могу понять, почему это может произойти, когда в документации ясно упоминается, что закрытые в скобки функции разрешены.

1 Ответ

2 голосов
/ 29 февраля 2020

Это, к сожалению, ошибка с выражениями по умолчанию для столбцов первичного ключа, Выражение По умолчанию устанавливается в NULL во время запроса CREATE TABLE, если поле заполнено PK .

Исправлено в MySQL 8.0.19 :

Для столбца, определенного как PRIMARY KEY в операторе CREATE TABLE, значение по умолчанию, заданное как выражение, было проигнорировано. (Ошибка # 29596969, Ошибка # 94668)

В качестве обходного пути (если вы не можете выполнить обновление), вы можете добавить первичный ключ впоследствии с ALTER TABLE -выступлением:

CREATE TABLE `session` (
  `id` binary(16) NOT NULL DEFAULT (UUID_TO_BIN(UUID(), TRUE)),
  `start_timestamp` timestamp NOT NULL, 
  `end_timestamp` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

ALTER TABLE `session` ADD PRIMARY KEY(`id`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...