Как изменение типа поля mysql с INT на VARCHAR повлияет на данные, ранее сохраненные как INT - PullRequest
47 голосов
/ 19 сентября 2011

Мне нужно обновить поле в моей производственной базе данных с INT на VARCHAR.

Информация в текущем поле INT является конфиденциальной, и я хочу убедиться, что я не изменил ее случайно или не уничтожил при изменении типа таблицы.Например, у пользователя может быть INT 123456, сохраненный в этом столбце, и я хочу убедиться, что он точно сохранен после преобразования в VARCHAR.

Каков рекомендуемый процесс для достижения этой цели?

Есть ли что-то, о чем мне нужно беспокоиться при использовании чего-то подобного?

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;

Заранее спасибо за любую помощь.

1 Ответ

53 голосов
/ 19 сентября 2011

Переведите ваш сервер MySQL в строгий режим, прежде чем изменить тип столбца, и убедитесь, что в столбце varchar(n) достаточно большой n, чтобы вместить все целые числа, когда они преобразованы в строки. Если вы не в строгом режиме, MySQL будет молча обрезать ваши данные до размера вашей строки :

Если режим строгого SQL не включен, и вы присваиваете столбцу CHAR или VARCHAR значение, которое превышает максимальную длину столбца, это значение усекается, чтобы соответствовать, и генерируется предупреждение. Для усечения непространственных символов вы можете вызвать ошибку (а не предупреждение) и запретить вставку значения с помощью режима строгого SQL.

Но если вы войдете в строгий режим сначала:

mysql> set sql_mode = 'STRICT_ALL_TABLES';
mysql> alter table table_sample change col_sample col_sample varchar(6);

Вы получите хорошее сообщение об ошибке, подобное этому:

ERROR 1406 (22001): Data too long for column 'col_sample' at row ...

если ваши целые числа не вписываются в varchar.

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

...