Spec-Zone.ru › MySQL 5.7

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

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

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

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

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

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

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

  • Если режим строгой SQL не включён, столбец VARCHAR со спецификацией длины, большей 65535, преобразуется в TEXT, а столбец VARBINARY со спецификацией длины, большей 65535, преобразуется в 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. См. Раздел 15.2.3.3, «Характеристики сжатых таблиц».

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

Spec-Zone.ru

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