Ответ 1
Верните свой сервер 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
.
И, конечно, у вас будет новая проверенная резервная копия вашей базы данных, прежде чем пытаться изменить таблицу. И по проверке я имею в виду, что вы успешно восстановили резервную копию в тестовой базе данных.