RailsのデータベースをAWSのRDSに設定して動かしています。
ruby
1config/database.yml 2 3・ 4・ 5・ 6production: 7 adapter: mysql 8 encoding: utf8 9 database: ebdb 10 username: root 11 password: ***** 12 host: ***** 13 port: 3306
この設定の時、formで日本語でpostした際にエラーが出てDBへのインサートができませんでした。
いろいろ調べているうちに、MySQLの文字コードの設定がデフォルトでlatin1だからutf-8に直さなきゃいけないということで、DB、対象のtableの文字コードを全てutf-8に設定しました。その対処で、DBへのインサートは日本語でも可能となりました。
※以下MySQL
creatorsテーブルの文字コード(今回postする対象のテーブル)
MySQL
1mysql> show create table creators; 2・ 3・ 4DEFAULT CHARSET=utf8 | 5・ 6・
MySQL
1mysql> show variables like 'char%'; 2+--------------------------+-------------------------------------------+ 3| Variable_name | Value | 4+--------------------------+-------------------------------------------+ 5| character_set_client | utf8 | 6| character_set_connection | utf8 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | utf8 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | /rdsdbbin/mysql-5.6.27.R1/share/charsets/ | 13+--------------------------+-------------------------------------------+ 148 rows in set (0.00 sec) 15 16
MySQL
1mysql> status 2・ 3・ 4Server characterset: utf8 5Db characterset: utf8 6Client characterset: utf8 7Conn. characterset: utf8 8・ 9・
MySQL
1mysql> show create database ebdb; 2+----------+---------------------------------------------------------------+ 3| Database | Create Database | 4+----------+---------------------------------------------------------------+ 5| ebdb | CREATE DATABASE `ebdb` /*!40100 DEFAULT CHARACTER SET utf8 */ | 6+----------+---------------------------------------------------------------+
しかし、viewを表示する時に、このpostしたデータが含まれるViewだと以下のエラーが出てしまいます。
※<%= render 'creators/creator' %>の中で、取り出したcreatorsテーブルのデータを表示させています。
/var/app/containerfiles/logs/production.log I, [2016-10-10T15:28:03.971128 #16893] INFO -- : Rendered creators/_creator.html.erb (14.0ms) I, [2016-10-10T15:28:03.971597 #16893] INFO -- : Rendered creators/index.html.erb within layouts/application (15.9ms) I, [2016-10-10T15:28:03.971704 #16893] INFO -- : Completed 500 Internal Server Error in 17ms (ActiveRecord: 8.8ms) F, [2016-10-10T15:28:03.972575 #16893] FATAL -- : ActionView::Template::Error (incompatible character encodings: UTF-8 and ASCII-8BIT): 33: <% end %> 34: </div> 35: </div> 36: <%= render 'creators/creator' %> 37: <%= paginate @creators %> 38: </div> 39: app/views/creators/index.html.erb:36:in `_app_views_creators_index_html_erb___2213862260463906443_47412086036740'
もちろん、creatorsテーブルに日本語のデータが入っていない場合は正常に表示され、エラーも出ません。
個人的には上記のログにある通り、Rendered creators/_creator.html.erbはできているみたいなので、出力自体はうまくいってて、パーシャルをレンダリングする際にパーシャルの中に日本語が含まれている場合に何か問題が起きているのかなと思いますが結局自分で解決できなかったため、今回質問させていただきました。
必要な情報かはわかりませんが、以下の通りMySQLではなくRailsのsqliteを使っている場合はこの一連のエラーは起こりません。
Ruby
1config/database.yml 2 3production: 4 <<: *default 5 database: db/production.sqlite3
以上です、ご存知の方がいらっしゃいましたらご教授お願いいたします…
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/11 02:55
2016/10/11 05:54
2016/10/11 11:51
2016/10/12 00:41
2016/10/12 10:44