0

latin1 でエンコードされた列が多数あるデータベースを utf8 に変換する作業を行っています。誤ってエンコードされた行が多数あり、列全体を移行する前に latin1 -> utf8 に変換する必要があります。次のクエリを使用して、問題のある行を特定するスクリプトを作成しました。

SELECT count(*) as count
FROM `user_profiles` 
WHERE CONVERT(CAST(`last_name` AS binary) USING utf8) IS NULL;

ローカルでは、4,000 行のカウントを返します。本番環境で実行すると、4,000 件の警告で空の結果が得られます。MySQL に警告を正常に返すように指示する設定、または私が見逃している設定が必要です。何かご意見は?

すべての文字セット変数が UTF8 に設定されていることを確認してみました。サーバーは mysql 5.5.29 を実行しており、5.6.13 をローカルで実行しています。

4

1 に答える 1

0

答えはsql_mode、よりリベラルな設定にすることでした。具体的には、STRICT_TRANS_TABLESNO_ENGINE_SUBSTITUTIONで問題が解決したようです。

これを実現するには、SQL クエリの先頭で次のコマンドを実行します。

SET `sql_mode` = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
于 2013-09-19T23:08:26.530 に答える