モデルの 1 つの属性に割り当てられた文字列を受け取り、それをデータベースに保存するコントローラーがあるというこの問題に直面しています。inspect 呼び出しを含むログ メッセージは、モデルが #save 呼び出しまで文字列を正常に取得していることを示しています。問題は、文字列にフランス語の文字が含まれている場合、エラーがスローされずに、その文字から文字列の末尾までの文字列が切り捨てられることです。
さらに調査すると、MySQL データベースに書き込まれるときに文字列が切り捨てられることが示されているようです。この記事にも出くわしました: Stale Rails Issue
私が正しく読んでいれば、ASCII 文字エンコーディングではなく、ISO Latin-1 文字エンコーディングの文字がこのバグの影響を受けているようです。私は実際に自分のプロジェクトを Rails 3.0 から Rails 3.2 に、Ruby 1.8 から Ruby 1.9 にアップグレードしたので、Rails で mysql2 アダプターを簡単に使用できるようになりました。しかし、そうではありませんでした。
では、文字列の切り捨てが起こらないようにするにはどうすればよいでしょうか?
Edit1:クエリを入力すると、次のようになりますSHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
。
Variable Name, Value
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'utf8'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'latin1'
'character_set_system', 'utf8'
'collation_connection', 'utf8_general_ci'
'collation_database', 'utf8_unicode_ci'
'collation_server', 'latin1_swedish_ci'
また、MySQL Query Browser を介してフランス語の文字を配置し、ブラウザで Rails アプリを更新して、表示されるデータベースから新しいデータを取得すると、正しく表示されることに気付きました。モデルデータを保存するときにドロップするようです。
Edit2:問題を解決するためにいくつかの構成パラメーターを変更しましたが、まだ存在しています。ただし、これは私が値を変更したものです。
Variable Name, Value
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'utf8'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'utf8'
'character_set_system', 'utf8'
'collation_connection', 'utf8_general_ci'
'collation_database', 'utf8_unicode_ci'
'collation_server', 'utf8_unicode_ci'