2011-02-21 15 views
2

環境によってhas_oneの関連付けを設定する:Rubyの1.9.2、Railsの3.0.1のRails:例外 "UTF-8に無効なバイトシーケンス" UUID

二つのMySQLテーブル:1項目、2。vote_counts(すべての行はアイテムに投票したユーザーの数を表します)

テーブルが大きいので、それらを破る必要があるため、私はUUIDを使用しています。 uuidカラムは両方のテーブルに定義されています。uuid varbinary(16)NOT NULL。 has_one:私はアイテムのモデルでhas_oneの関連規定され

vote_countを、:FOREIGN_KEY => "UUID"、:私はitem.vote_countを呼び出すとPRIMARY_KEY =>

を "UUID"、私は上の次の例外を取得していますいくつかのUUID値: "ArgumentError:UTF-8で無効なバイトシーケンス"。

もちろん、生のUUIDは単なるバイト列(エンコーディング:ASCII-8BIT)ですが、ActiveRecordがSQLクエリを作成するとき、それをUTF-8文字列として解釈しようとします。

バイトシーケンスをMySQLに渡すだけでどうすればいいですか?

+0

MySQLのドライバ(およびどのバージョン)を使用していますか?問題の列に対してMySQLが持つエンコードは何ですか? –

+0

ドライバ:mysql2 ver 0.2.6 –

+0

テーブルにはutf8エンコーディングがありますが、varbinaryカラムについては重要ですか? –

答えて

1

あなたはUUIDを生成する

UUIDTools::UUID.random_create.hexdigest[0, 8] 

のようなものを使用していますか?

これを使用して、モデルの文字列フィールドにmysqlとpostgresの両方のDBを使用して割り当てます。注:我々はキーとしてそれらを使用していません。モデルの通常のフィールドと同じように。

+1

データベースの文字列にUUIDを格納する場合、この問題は問題にはなりませんが、このように格納すると、varbinary(16)に比べてスペースが大幅に浪費されます。 –

関連する問題