2

他の言語 (Web ページのタイトルとメタの説明) で大量のデータを処理するアプリを持っています。最近、MySQL から Percona に切り替えたところ、MySQL が黙ってエラーを起こしたと思われるすべてのエラーが見つかりました。

私が修正できなかった唯一のものは

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 

私は現在の質問と回答を見てきましたが、それらはすべてUTF8に変換するための既知のエンコーディングを想定しています.エンコーディングはわかりません.

私がやりたいのは、Rails で UTF8 に変換することです (force_encoding を試しましたが、うまくいきませんでした)。または、UTF8 かどうかを確認し、そうでない場合は削除します。

4

2 に答える 2

7

ユニコード絵文字を mysql データベースに挿入しようとしたときに、この問題に遭遇しました... utf8 で安全だと思うかもしれませんが、そうではありません。Emoji は 4 バイトを使用し、utf8 は 3 バイトしか使用しません。解決策は、utf8mb4 エンコーディングと照合を使用することです。

これを行うには、最初に database.yml を次のように更新します。

development:
  adapter: mysql2
  database: my_database
  username: a_user
  password: the_password
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci

既存のデータベースがある場合は、次の sql を実行する必要があります。

ALTER TABLE `[table]` 
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
MODIFY [column] VARCHAR(250)
    CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

まだ本番環境にリリースしていない場合は、そのまま行うことができます

bundle exec rake db:drop db:create db:migrate

ジェイソン・サイファーから恥知らずに取られた

于 2015-02-01T19:34:06.400 に答える