1

Fixtures を使用した sqlite3 データベースのシードは、config1 では機能しましたが、config2 の utf-8 サポートでは失敗します。

config1: Ubuntu 11.04、ruby 1.9.2p136、Rails 3.0.3、「開発」環境

config2: OS X Lion、ruby 1.9.2p290、Rails 3.0.3、「開発」環境

次のようなymlファイルがある場合

001: 
  id: 1
  name: "\xC3\xBC"

それを使用してデータベースにデータを入力します

Fixtures.create_fixtures(...)

シード.rbで

その後、データベースには、ID 1 と名前「ü」のエントリが表示されます。それは正しいでしょう。それはconfig1でうまくいきました。config2 では、常に "ü" という名前のエントリがあります。utf-8 エンコーディングが失敗するようです。

RailsプロジェクトのどこでもすでにUTF-8をオンにしています:

encoding: utf-8

database.yml で

# encoding: utf-8

シード.rbで

Encoding.default_external = "UTF-8"
Encoding.default_internal = "UTF-8"
config.encoding = "utf-8"

config/environments/development.rb 内

4

1 に答える 1

0

これら 2 つのシステムのエンディアンが異なる可能性はありますか?

SQLite3 リリース ノートから:

UTF-8 および UTF-16 のサポート

SQLite 3.0 の新しい API には、ホスト マシンのネイティブ バイト オーダーでテキストを UTF-8 と UTF-16 の両方として受け入れるルーチンが含まれています。各データベース ファイルは、テキストを UTF-8、UTF-16BE (ビッグ エンディアン)、または UTF-16LE (リトルエンディアン) として管理します。

ここで確認できます: http://en.wikipedia.org/wiki/Endianness#Endianness_and_operating_systems_on_architectures

于 2012-05-17T21:15:04.697 に答える