私は最近、10年前に作成された古いプロジェクトを引き継ぎました。MySQL 5.1を使用します。
特に、デフォルトの文字セットをlatin1からutf8に変更する必要があります。
例として、次のようなテーブルがあります。
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(45) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
`last_name` varchar(45) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
`username` varchar(127) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`email` varchar(127) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`pass` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`active` char(1) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT 'Y',
`created` datetime NOT NULL,
`last_login` datetime DEFAULT NULL,
`author` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT 'N',
`locked_at` datetime DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`ripple_token` varchar(36) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
`ripple_token_expires` datetime DEFAULT '2014-10-31 08:03:55',
`authentication_token` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_users_on_reset_password_token` (`reset_password_token`),
UNIQUE KEY `index_users_on_confirmation_token` (`confirmation_token`),
UNIQUE KEY `index_users_on_unlock_token` (`unlock_token`),
KEY `users_active` (`active`),
KEY `users_username` (`username`),
KEY `index_users_on_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1677 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
私はこれに取り組むために自分のMacをセットアップしました。それについてあまり考えずに、MySQL 5.7をインストールする「brew install mysql」を実行しました。だから私はいくつかのバージョンの競合があります。
このデータベースのコピーをダウンロードしてインポートしました。
次のようなクエリを実行しようとすると、
ALTER TABLE users MODIFY first_name varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
私はこのエラーを受け取ります:
ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'created' at row 1
私はこれで修正できると思いました:
ALTER TABLE users MODIFY created datetime NULL DEFAULT '1970-01-01 00:00:00';
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
しかし私は得る:
ALTER TABLE users MODIFY first_name varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'created' at row 1
すべての値を更新する必要がありますか?
テーブルが空であるか、それほど大きくない場合は、createステートメントを.sqlファイルとしてエクスポートし、必要に応じて書き換えてください。既存のデータがある場合、つまりエクスポート挿入ステートメントも同じように実行します(これを作成ステートメントとして別のファイルで行うことをお勧めします)。最後に、テーブルをドロップし、最初のcreateステートメントを実行してから挿入します。
mysqldump
MySQLインストールに含まれているいずれかのコマンドを使用することも、MySQL Workbenchをインストールすることもできます。MySQLWorkbenchは、特定のコマンドオプションを探すことなく、非常にカスタマイズ可能な方法でこのオプションを含む無料のグラフィカルツールです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加