3

この問題は、一般的に見られる「互換性のない文字エンコード:ASCII-8BITおよびUTF-8」の問題として始まりましたが、それは私が求めていることではありません。むしろ、データベースの特定のフィールドが取得時にASCII-8BITとしてタグ付けされているのに対し、ほとんどのフィールドはUTF-8として正しく表示されているため、この問題が発生していることがわかりました。

たとえば、行16の両方の列が同じ値(コピーされて貼り付けられた)を持つ列countryと、を持つテーブルでは、次のようになります。nationality

irb(main):003:0> c = Country.find(16)
irb(main):004:0> puts "#{c.name}, #{c.name.encoding}, #{c.name.bytes.to_a}"
�land Islands, UTF-8, [195, 133, 108, 97, 110, 100, 32, 73, 115, 108, 97, 110, 100, 115]
irb(main):005:0> puts "#{c.nationality}, #{c.nationality.encoding}, #{c.nationality.bytes.to_a}"
�land Islands, ASCII-8BIT, [195, 133, 108, 97, 110, 100, 32, 73, 115, 108, 97, 110, 100, 115]

同様に、単純なギブは、同じバイト、異なるプレゼンテーションをputs name与えます。�land Islandsnationality"\xC3\x85land Islands"

特定の列のエンコーディングは、文字列にASCII以外の文字が含まれているかどうかに関係なく一定であるように見えるため、文字列の問題だけではありません。つまり、のすべての値はnationalityASCIIとして解釈され、のすべての値はnameUTF-8として解釈されます。

問題は単一のテーブルに限定されるものではなく、列が誤認識されるパターンは見つかりませんでした。

設定と環境は次のとおりです。

  • Windows764ビット上のRails3.0.0
  • データベースアダプタ:mysql2とmysqlはどちらも同じ動作を示します
  • Database.ymlにはencoding: utf8
  • application.rbにはconfig.encoding = "utf-8"
  • MySQLデータベース、テーブル、および両方の列はutf8として定義されています
  • MySQLの両方の列はvarchar、255であり、nullを許可します
  • Railsを新しくインストールし、データベースにアクセスするために定義された国モデル以外は何もしないで、問題を再現できます。私はまだ新しい1行のデータベースを試していません。

誰もがここで何が起こっているのか知っていますか?

4

3 に答える 3

0

ここでも同じ問題です!mysql2 gem、Rails3.0.3および「互換性のない文字エンコード」エラー

于 2011-02-07T10:50:58.380 に答える
0

私は解決策を見つけました。mysqlまたはmysql2gemsの代わりにruby-mysqlgemを使用してください。

于 2011-02-23T07:31:22.990 に答える
-1

私も同じような問題を抱えていると思います。

MySQL DB Railsからデータを取得すると、文字列がfloatに変換されます。

列「Complemento」と「estado」はDB内の文字列ですが、アクション「show」はComplementoを示しています:0.0->DBでは「apto191」です

Escolaは正常に作成されました。

名:シルバブラガ

Endereco:Rua Dr Arnaldo

ヌメロ:99

補数:0.0->DBは「apto191」です

シダーデ:サンパウロ

Estado:0.0->DBは「MG」

編集| 戻る

于 2010-11-26T01:50:22.857 に答える