Spec-Zone .ru
спецификации, руководства, описания, API

11.3.4. YEAR(2) Ограничения и Переходящий наYEAR(4)

Хотя внутренний диапазон значений для YEAR(4) и YEAR(2) то же самое (1901 к 2155, и 0000), дисплей width для YEAR(2) делает тот тип по сути неоднозначным, потому что выведенные на экран значения указывают только на последние две цифры внутренних значений. Результатом может быть потеря информации при определенных обстоятельствах. Поэтому рассмотрите уход от YEAR(2) всюду по Вашим приложениям и использованию YEAR(4) везде, где Вы нуждаетесь в a YEAR тип данных. Этот раздел описывает проблемы, которые могут произойти при использовании YEAR(2) и предоставляет информацию о переходе существующего YEAR(2) столбцы к YEAR(4). Отметьте, что миграция станет необходимой в некоторый момент потому что поддержка YEAR типы данных с дисплеем оценивают кроме 4, наиболее особенно YEAR(2), уменьшается с MySQL 5.6.6 и будет удален полностью в будущем выпуске.

YEAR(2) Ограничения

Проблемы с YEAR(2) тип данных включает неоднозначность выведенных на экран значений, и возможную потерю информации, когда значения выводятся и перезагружаются или преобразовываются в строки.

Чтобы избежать этих проблем, использовать YEAR(4) вместо YEAR(2). Предложения относительно стратегий миграции появляются позже в этом разделе.

Уменьшенный YEAR(2) Поддержка в MySQL 5.6

С MySQL 5.6.6, поддержки YEAR(2) уменьшается:

Переход от YEAR(2) к YEAR(4)

Если Вы решаете преобразовать YEAR(2) столбцы к YEAR(4), можно сделать так вручную в любое время без обновления. Альтернативно, можно обновить до версии MySQL с уменьшенной поддержкой YEAR(2) (MySQL 5.6.6 или позже), затем имейте MySQL, преобразовывают YEAR(2) столбцы автоматически. В последнем случае избегите обновлять, выводя и перезагружая Ваши данные, потому что это может изменить значения данных. Кроме того, если Вы используете репликацию, есть соображения обновления, которые следует принять во внимание.

Преобразовать YEAR(2) столбцы к YEAR(4) вручную, использовать ALTER TABLE. Предположите что таблица t1 имеет это определение:

CREATE TABLE t1 (ycol YEAR(2) NOT NULL DEFAULT '70');

Измените использование столбца ALTER TABLE следующим образом. Не забудьте включать любые атрибуты столбца такой как NOT NULL или DEFAULT:

ALTER TABLE t1 MODIFY ycol YEAR(4) NOT NULL DEFAULT '1970';

ALTER TABLE оператор преобразовывает таблицу без изменения YEAR(2) значения. Если сервер является ведущим устройством репликации, ALTER TABLE оператор тиражируется к ведомым устройствам и производит соответствующее табличное изменение на каждом.

Другой метод миграции должен выполнить двоичное обновление: MySQL 5.6.6 Установки или позже не выводя и перезагружая Ваши данные. Затем выполненный mysql_upgrade, который использует REPAIR TABLE преобразовать YEAR(2) столбцы к YEAR(4) не изменяя значения данных. Если сервер является ведущим устройством репликации, REPAIR TABLE операторы тиражируются к ведомым устройствам и производят соответствующие табличные изменения на каждом, если Вы не вызываете mysql_upgrade с --skip-write-binlog опция.

Обновления до серверов репликации обычно включают ведомые устройства обновления более новой версии MySQL, затем обновляя ведущее устройство. Например, если ведущее устройство и ведомое устройство оба выполненных MySQL 5.5, типичная последовательность обновления включает обновление ведомого устройства 5.6, то, обновляя ведущее устройство до 5.6. Относительно другого отношения YEAR(2) с MySQL 5.6.6 та последовательность обновления приводит к проблеме: Предположите, что ведомое устройство еще было обновлено, но ведущее устройство. Затем составляя таблицу, содержащую a YEAR(2) столбец на ведущем устройстве приводит к таблице, содержащей a YEAR(4) столбец на ведомом устройстве. Следовательно, у этих операций будет различный результат на ведущем устройстве и ведомом устройстве, если Вы будете использовать основанную на операторе репликацию:

Чтобы избежать таких проблем, используйте одну из этих стратегий:

Одного метода миграции нужно избежать: не выводите свои данные с mysqldump и перезагружайте файл дампа после обновления. У этого есть потенциал, чтобы измениться YEAR(2) значения, как описано ранее.

Миграция от YEAR(2) к YEAR(4) должен также включить код программы исследования для возможности измененного поведения при условиях, таких как они: