Подтвердить что ты не робот

Как изменение типа поля mysql от INT до VARCHAR влияет на данные, ранее сохраненные как INT

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

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

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

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

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;

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

4b9b3361

Ответ 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.

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