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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

2回答

1729閲覧

MYSQLへの保存。Mysql2::Error: Incorrect string valueのエラーが出てしまう

tttu

総合スコア26

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

1クリップ

投稿2019/08/28 14:12

編集2019/08/29 03:05

前提・実現したいこと

数字を含んだ文字列をproduction環境でMYSQL5.5.6のDBに保存したい。

MYSQL5.5.6(AWSのEC2)
ruby 2.6.3
rails 5.2.3

発生している問題・エラーメッセージ

例) ”35.8019293,139.7176375”
上記のような文字列をカラムに保存しようとしたところ以下のようなエラーが出てしまい保存ができない

Mysql2::Error: Incorrect string value: '\xE5\xB7\x9D\xE5\x8F\xA3...'

該当のソースコード

database.yml

Ruby

1production: 2 adapter: mysql2 3 database: db_commute_info 4 encoding: utf8mb4 5 charset: utf8mb4 6 collation: utf8mb4_general_ci 7 pool: 5 8 timeout: 5000 9 username: <%= ENV['DATABASE_AWS_USER'] %> 10 password: <%= ENV['DATABASE_AWS_PASSWORD'] %> 11 host: <%= ENV['DATABASE_AWS_HOST'] %>

my.cnf

Ruby

1[client] 2default-character-set=utf8mb4 3 4[mysqld] 5character_set_server=utf8mb4

MYSQLの設定

イメージ説明

該当カラム

イメージ説明

controller

Ruby

1 if !@info.station1.empty? && !@info.station1.include?("駅") 2 @info.station1 << "駅" 3 results1 = Geocoder.search(@info.station1) 4 @info.longitude_latitude1 = results1.first.coordinates.join(',') 5 elsif !@info.station1.empty? && @info.station1.include?("駅") 6 results1 = Geocoder.search(@info.station1) 7 @info.longitude_latitude1 = results1.first.coordinates.join(',') 8 end 9 10 11 if @info.save 12 . 13 . 14 .

試したこと

・MYSQLで、variable_nameの文字コードをutf8mb4に
・database.yml内の設定もutf8mb4に

上記一通り試して見ましたが数時間ハマりっぱなしの状態です。お力添えいただければ幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/29 00:12

保存をしている部分のコードを追記してください。
tttu

2019/08/29 03:05

追記しました
guest

回答2

0

対象テーブル/DBの文字コードがutf8mb4以外の文字コードになっているのではありませんか?

MYSQLの設定

のcharacter_set_databaseがutf8ですし(=utf8mb4ではありません)。

データベースの文字コード、および、既存テーブルの文字コード変更手順については
https://qiita.com/deco/items/bfa125ae45c16811536a
が参考になるのではないかと思います。
(データベースの文字コード変更は「これから作るテーブル/データベース」には適応されますが、既に作成済みのテーブル等についてはそのままになるので、テーブルの文字コード変更も行う必要があります)

投稿2019/08/29 04:21

nak

総合スコア696

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

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

tttu

2019/08/29 04:35

回答ありがとうございます。 character_set_databaseをutf8mb4に設定しなおしてみましたが、同じエラーが出てしまいました。
nak

2019/08/29 04:38

alter table テーブル名 default character set utf8mb4; も実行されましたか?
tttu

2019/08/29 04:42

合わせて実行し、データベース・テーブルとも文字コードをutf8mb4に変更しました。
tttu

2019/08/30 03:53

解決しました、ご回答ありがとうございました。
guest

0

ベストアンサー

保存しようとしているデータが文字列ではないので、 longitude_latitude1 の値を確認してください。

投稿2019/08/29 03:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tttu

2019/08/29 03:36

irb(main):010:0>longitude_latitude1 = results1.first.coordinates.join(',') => "35.8019293,139.7176375" irb(main):011:0> longitude_latitude1.class => String コンソールで確認してみたところStringになっていたので、文字列かと思っていたのですが間違いということでしょうか。よろしくおねがいします。
退会済みユーザー

退会済みユーザー

2019/08/29 03:39 編集

的確なコメントありがとうございます。 確かに問題ないと思います。 MySQLのエラーが出た具体的な過程(ログ)は分かりますか? また、可能ならばコンソールからsaveしてみた結果はどうでしょうか。
tttu

2019/08/29 04:06 編集

``` D, [2019-08-29T03:23:50.884683 #11965] DEBUG -- : [4b849c6a-2726-4267-88fa-9efb52bd792a] Info Create (1.0ms) INSERT INTO `infos` (`station1`, `longitude_latitude1`, `station2`, `longitude_latitude2`, `route1`, `route2`, `route3`, `route4`, `day`, `push_time`, `line_user_id`, `created_at`, `updated_at`, `push_time2`) VALUES ('川口駅', '35.8019293,139.7176375', 'さいたま新都心駅', '35.8019293,139.7176375', '京浜東北線,JR東日本', '', '', '', '1256', '15:30', '666666', '2019-08-29 03:23:50', '2019-08-29 03:23:50', '19:00') D, [2019-08-29T03:23:50.885262 #11965] DEBUG -- : [4b849c6a-2726-4267-88fa-9efb52bd792a] (0.4ms) ROLLBACK I, [2019-08-29T03:23:50.885525 #11965] INFO -- : [4b849c6a-2726-4267-88fa-9efb52bd792a] Completed 500 Internal Server Error in 566ms (ActiveRecord: 4.8ms) F, [2019-08-29T03:23:50.886340 #11965] FATAL -- : [4b849c6a-2726-4267-88fa-9efb52bd792a] F, [2019-08-29T03:23:50.886380 #11965] FATAL -- : [4b849c6a-2726-4267-88fa-9efb52bd792a] ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE5\xB7\x9D\xE5\x8F\xA3...' for column 'station1' ``` 上記がログです。 大変失礼しました。エラーが出ていたカラムはlongitude_latitude1ではなく”川口駅”などの文字列を保存するstation1でした。 ただ、station1に関しても保存する部分は先程追記させていただいたcontrollerの部分のみです。よってシンプルに文字列の保存全般ができていない状態のようです。 コンソールからのsaveを試してみたところ、上記ログと全く同じエラーが出ました。 ちなみにろーかる環境ではなぜか保存可能です。 お付き合いいただきありがとうございます。
退会済みユーザー

退会済みユーザー

2019/08/29 04:32

> ろーかる環境では デプロイ先?はどこなのでしょう。 そこで日本語は適切に使用可能ですか?
退会済みユーザー

退会済みユーザー

2019/08/29 10:21 編集

nakさんとの回答も合わせ、特に問題が見当たりません。 ひとつ気づいたのですが、「MYSQLの設定」のところで示していただいた情報(可能ならばコピペ可能なようにテキストにして頂ければ、と思います)のcharacter_sets_dir が RDS のそれでないような気がしました。 文字コードの変更等の作業はRDS側で行っていますでしょうか(ローカルではなく)。
tttu

2019/08/30 03:52

まさにそれでした。。 RDSのエンドポイントを使ってMYSQLに入っていませんでした。 お手数おかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問