2013-12-09 20 views
5

Mysql 5.5.34を使用し、utf8エンコーディングを使用するRails 3.2プロジェクトがあります。今私はutf8エンコーディングを表すunicode文字を保存することができませんでした。RailsプロジェクトでMysqlエンコーディングutf8をutf8mb4に変換するには

utf8mb4エンコードを使用するようにデータベース全体を変換しても問題ありません.4バイトのユニコードを含むことができるウェブで見つかったエンコードは、emojiを含みますか?

私がデータベースに持っているすべての情報は、utf8mb4でエンコードされていますか?もし私がそうすればデータが失われますか?

Railsが提供する方法はありますか?

ありがとうございました。

+0

にアップグレード同じ状況..何をやったの? – Hari

+0

@ハリ遅く返事を申し訳ありません。私はこのブログに続いてそれをしました:http://blog.xdite.net/posts/2013/12/19/mysql-with-utf8mb4。残念ながら、それは中国語で書かれています、あなたはそれが役立つかどうかを確認するためにGoogle翻訳を試してみませんか? – larryzhao

+0

http://blog.arkency.com/2015/05/how-to-store-emoji-in-a-rails-app-with-a-mysql-database/ – mahemoff

答えて

0

実際には、エンコードする列をutf8mb4で移行するだけです。あなたがデータ自体を移行する場合の一般的なUTF8の3つのバイト文字と4バイトのうちutf8mb4の外に構成されているため

execute("ALTER TABLE yourtablename MODIFY yourcolumnname TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;") 

ことは、できない場合があります。だからあなたは既にあなたのデータベースに壊れたデータを持っているかもしれません。

さらにRails 3.2には、ActiveSupports JSONエンコーディングにエンコーディングの問題があります。私はちょっと直面していますが、JSONや絵文字で作業する予定の場合、あなたは(レール4 https://github.com/rails/rails/blob/4-0-stable/activesupport/lib/active_support/json/encoding.rb溶液に基づいて)次のようにパッチを追加する必要がありますまたは単にレール4

module ActiveSupport 
    module JSON 
    module Encoding 
     class << self 
     def escape(string) 
      if string.respond_to?(:force_encoding) 
      string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY) 
      end 
      json = string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] } 
      json = %("#{json}") 
      json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding) 
      json 
     end 
     end 
    end 
    end 
end 
+0

私は上記のalter tableクエリを実行しました。スマイリーはまだこの "????"のような疑問符の束として終わります.. 何か案が? – Hari

+0

それを持って..問題は私のアプリケーションのデータベース接続です.. – Hari

+0

私は答えに追加する必要がありますか? – schmierkov

関連する問題