mysql: слишком длинные данные для столбца в изменяемой таблице - PullRequest
2 голосов
/ 13 июля 2011

Я изменяю столбец из текста в столбец varchar.

+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| ID           | bigint(19)   | NO   | PRI | NULL    |       |
| STATUS           | varchar(120) | YES  |     | NULL    |       |
| PRIORITY         | varchar(120) | YES  |     | NULL    |       |
| DESCRIPTION      | text         | YES  |     | NULL    |       |

, когда я выполняю следующий запрос,

alter table StatInfo modify column DESCRIPTION varchar(255) NULL;

В нем говорится ОШИБКА 1406 (22001): данные слишком длинныедля столбца «ОПИСАНИЕ» в строке 7

Он не усекает значение в столбце и не изменяет таблицу, почему ?.где, как в более старой версии это работает.

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Может быть, вам нужно проверить режим sql, если он строгий, то он покажет эту ошибку

Когда вы изменяете тип данных с помощью CHANGE или MODIFY, MySQL пытается преобразовать существующие значения столбца вновый тип как нельзя лучше.

Внимание! Это преобразование может привести к изменению данных.Например, если вы укоротите строковый столбец, значения могут быть усечены.Чтобы предотвратить успешное выполнение операции, если преобразование в новый тип данных приведет к потере данных, включите строгий режим SQL перед использованием ALTER TABLE (см. Раздел 5.1.6, «Режимы SQL сервера»).

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

0 голосов
/ 13 июля 2011

Я предлагаю вам
1) Скопируйте эту таблицу во временную таблицу (через insert-select)
2) Измените исходную таблицу
3) Восстановите значения в исходной таблице, используя процедуру, описанную в 1)

...