Spec-Zone.ru › MySQL 8.4

15.1.20.7 Тихий изменения спецификаций столбцов

В некоторых случаях MySQL тихо изменяет спецификации столбцов по сравнению с указанными в инструкции CREATE TABLE или ALTER TABLE. Это могут быть изменения типа данных, атрибутов, связанных с типом данных, или спецификации индекса.

Все изменения подчиняются внутреннему ограничению размера строки в 65 535 байтах, что может привести к отказу некоторых попыток изменения типа данных. См. Раздел 10.4.7, «Ограничения на количество столбцов таблицы и размер строки».

  • Столбцы, которые являются частью PRIMARY KEY, делаются NOT NULL, даже если это не объявлено явно.

  • Конечные пробелы автоматически удаляются из значений членов ENUM и SET при создании таблицы.

  • MySQL отображает определённые типы данных, используемые другими поставщиками СУБД SQL, в типы MySQL. См. Раздел 13.9, «Использование типов данных из других СУБД».

  • Если вы включите в инструкцию USING, чтобы указать тип индекса, который недопустим для данного движка хранения, но есть другой тип индекса, который движок может использовать без влияния на результаты запросов, движок использует доступный тип.

  • Если строгий режим SQL не включён, столбец VARCHAR со спецификацией длины, большей чем 65 535, преобразуется в TEXT, а столбец VARBINARY со спецификацией длины, большей чем 65 535, преобразуется в BLOB. В противном случае возникает ошибка в любом из этих случаев.

  • Указание атрибута CHARACTER SET binary для типа данных символьных данных приводит к созданию столбца в соответствующем двоичном типе данных: CHAR становится BINARY, VARCHAR становится VARBINARY, а TEXT становится BLOB. Для типов данных ENUM и SET это не происходит; они создаются как объявлены. Предположим, что вы указали таблицу с этим определением:

    CREATE TABLE t
    (
      c1 VARCHAR(10) CHARACTER SET binary,
      c2 TEXT CHARACTER SET binary,
      c3 ENUM('a','b','c') CHARACTER SET binary
    );
    

    Результирующая таблица имеет следующее определение:

    CREATE TABLE t
    (
      c1 VARBINARY(10),
      c2 BLOB,
      c3 ENUM('a','b','c') CHARACTER SET binary
    );
    

Чтобы узнать, использовал ли MySQL тип данных, отличный от указанного вами, выполните инструкцию DESCRIBE или SHOW CREATE TABLE после создания или изменения таблицы.

Некоторые другие изменения типов данных могут произойти, если вы сжимаете таблицу с помощью myisampack. См. Раздел 18.2.3.3, «Характеристики сжатых таблиц».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/silent-column-changes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API