質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3492閲覧

MySQL(RDS)+Railsで日本語のPOSTで文字コードエラー

hisataka

総合スコア19

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2016/10/10 16:17

RailsのデータベースをAWSのRDSに設定して動かしています。

ruby

1config/database.yml 2 3456production: 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; 234DEFAULT CHARSET=utf8 | 56

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 234Server characterset: utf8 5Db characterset: utf8 6Client characterset: utf8 7Conn. characterset: utf8 89

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

以上です、ご存知の方がいらっしゃいましたらご教授お願いいたします…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テーブルの文字コードはどのようなコマンドで変更しましたか?
カラムにも文字コードが設定されているので、utf-8になっていない可能性があります。

次の構文ならカラムもすべて変換いけるはずです。

ALTER TABLE テーブル名 CONVERT TO CHARACTER SET UTF8

投稿2016/10/10 23:51

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hisataka

2016/10/11 02:55

回答ありがとうございます。 そちらのコマンドで文字コードを変更しました。なのでカラムも含めてutf8に変更されていると思います…
moonphase

2016/10/11 05:54

SHOW FULL COLUMNS FROM creators; のCollationはどうなっていますか?
hisataka

2016/10/11 11:51

こちらになりました。 mysql> SHOW FULL COLUMNS FROM creators; +-------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | id | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | | | user_id | int(11) | NULL | YES | | NULL | | select,insert,update,references | | | name | varchar(255) | utf8_general_ci | YES | UNI | NULL | | select,insert,update,references | | | description | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | tag | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | created_at | datetime | NULL | NO | | NULL | | select,insert,update,references | | | updated_at | datetime | NULL | NO | | NULL | | select,insert,update,references | | | image | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | likes_count | int(11) | NULL | YES | | NULL | | select,insert,update,references | | | likes | int(11) | NULL | YES | | NULL | | select,insert,update,references | | | value | int(11) | NULL | YES | | NULL | | select,insert,update,references | | | imagevalue | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | start_time | datetime | NULL | YES | | NULL | | select,insert,update,references | | | work_id | int(11) | NULL | YES | | NULL | | select,insert,update,references | | | works | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | genre | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | worksname | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | | wiki | tinyint(1) | NULL | YES | | NULL | | select,insert,update,references | | +-------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ 18 rows in set (0.01 sec) わかりづらくて申し訳ないのですが、漢字を実際に入れているのはnameになります。
moonphase

2016/10/12 00:41

ありがとうございます。 DB側は問題なさそうに見えます。 DBから取得した文字列がASCII-8BITになりバイト列になっているようなので、 取得した文字列をs.force_encoding("utf-8")で文字コード情報を変更してみてはいかがでしょうか。
hisataka

2016/10/12 10:44

解決できました!ありがとうございます! とりあえずこのnameカラムを表示する際に教えていただいたforce_encodingを使って解決できたのですが、日本語のデータをViewに表示させる機会もまだまだありますし、Rails全体をUTF8で表示させてくれるようにしたいです。 その場合はconfigファイルで設定するという認識であっていますか?RailsはデフォルトでUTF8という記述が多かったので、もしすでにUTF8だとしたら今回はそれとはまた別なところに問題があって通常のconfigファイルに記述するやり方以外の指定をするべきなのかなと思ったので。 もし心当たりあるようでしたらご教授お願いいたします。 全然自分で解決できなかったことなので本当に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問