web-dev-qa-db-ja.com

mysqlフィールドタイプをINTからVARCHARに変更すると、以前INTとして保存されていたデータにどのような影響がありますか

実動データベースのフィールドをINTからVARCHARに更新する必要があります。

現在のINTフィールドの情報は機密情報であり、テーブルタイプを変更する際に不注意に変更したり、破壊したりしないようにしたいです。たとえば、ユーザーはこの列にINT 123456を保存している可能性があり、VARCHARに変換されると正確に保存されるようにします。

これを達成するための推奨プロセスは何ですか?

このようなものを使用するときに心配する必要があるものはありますか?

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;

助けてくれてありがとう。

47
john k

カラムタイプを変更する前にMySQLサーバーをストリクトモードにし、varchar(n)カラムが十分な大きさのnを持っていることを確認してください。厳密モードでない場合、MySQLは 文字列サイズに合わせてデータをサイレントに切り捨てます

厳密なSQLモードが有効になっておらず、列の最大長を超えるCHARまたはVARCHAR列に値を割り当てると、値が収まるように切り捨てられ、警告が生成されます。スペース以外の文字の切り捨ての場合、(警告ではなく)エラーを発生させ、厳密なSQLモードを使用して値の挿入を抑制することができます。

ただし、最初に strict mode になった場合:

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に収まらない場合。

そして、もちろん、テーブルを変更する前に、データベースの検証済みバックアップを新たに取得します。そしてverifiedによって、バックアップをテストデータベースに正常に復元したことを意味します。

53
mu is too short