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

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

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

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

Ruby on Rails

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

Q&A

1回答

2197閲覧

【MySQL】Error: Incorrect datetime value

ryouya

総合スコア14

MySQL

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/28 04:23

編集2020/03/29 04:56

rails t実行時にエラーが出力されました。
知見がある方がいらっしゃいましたらご教授ください。

ec2-user:~/environment/sample_app (master) $ rails t Running via Spring preloader in process 5114 Started with run options --seed 31479 ERROR["test_address_should_be_present", PostTest, 0.4865396719999353] test_address_should_be_present#PostTest (0.49s) ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect datetime value: '2020-03-28 01:57:57 UTC' for column 'created_at' at row 1: INSERT INTO `posts` (`store_name`, `address`, `image`, `environment`, `evaluation`, `time_start`, `time_end`, `created_at`, `updated_at`, `id`, `user_id`) VALUES ('MyString', 'MyString', 'MyString', 'MyString', 'MyString', 'MyString', 'MyString', '2020-03-28 01:57:57 UTC', '2020-03-28 03:57:58', 980190962, 762146111) : (同様のエラーが出力されます) :

#調べたこと

Mysql2::Error: Incorrect datetime value: ・・・

こちらのエラーがSQLとして渡された日付の値が不正であるということを表しているとなので、デフォルトのSQLモードを変更しました。

ec2-user:~/environment/sample_app (master) $ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. : : mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; Query OK, 0 rows affected (0.00 sec)

エラーは解決しませんでした。

#関連ファイル

#posts.yml one: store_name: MyString address: MyString image: MyString environment: MyString evaluation: MyString time_start: MyString time_end: MyString user: one created_at: <%= 2.hours.ago %> user: michael two: store_name: MyString address: MyString image: MyString environment: MyString evaluation: MyString time_start: MyString time_end: MyString user: two created_at: convert_tz('<%= Time.zone.now %>', '+00:00','+09:00'); user: ants <% 30.times do |n| %> post_<%= n %>: store_name: <%= Faker::Lorem.sentence(5) %> address: <%= Faker::Lorem.sentence(5) %> created_at: <%= 42.days.ago %> user: michael <% end %>
#database.yml development: adapter: mysql2 encoding: utf8 database: sample_app_development pool: 5 username: root password: host: localhost test: adapter: mysql2 encoding: utf8 reconnect: false database: sample_app_test pool: 5 username: root password: host: localhost production: adapter: mysql2 encoding: utf8 reconnect: false database: sample_app_production pool: 5 username: root password: host: localhost

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

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

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

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

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

guest

回答1

0

世界各地に店舗や工場を持っている企業では現地のタイムゾーンで使いたい、ってよくある要望ですが、
MySQLのDATETIMEはOracleのようにWITH TIME ZONE付きのデータ型 をサポートしていないので列毎にTIME ZONEを指定できないので、

Mysql2::Error: Incorrect datetime value: '2020-03-28 01:57:57 UTC' for column 'created_at' at row 1

ってエラーになるのでしょう。
UTC 協定世界時の時差 JSTはUTC+0900(プラス9時間)ですから、調整してあげないといけないようです。
CONVERT_TZ関数の使い方

MySQLのDATETIME型とTIMESTAMP型のタイムゾーン的な違いの話+O/Rマッパーのタイムゾーンの挙動の話 も熟読されるといいでしょう。

投稿2020/03/28 08:26

Orlofsky

総合スコア16415

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

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

ryouya

2020/03/29 04:52 編集

ご回答ありがとうごます。 ご返答遅れてしまい申し訳ございません。 「timezone_posix.sql」でタイムゾーンデータのインポートをし、「my.cnf」に下記を追記しました。 【my.cnf】-------------------------------------------------------------------------------------------- [mysqld] default-time-zone = 'Asia/Tokyo' ----------------------------------------------------------------------------------------------------------- MySQL上にてタイムゾーンがJSTになっていることも確認できたのですが、`rails t`を行うと結果は変わらず本件のエラーが出力されます。 【ターミナル】---------------------------------------------------------------------------------------- mysql> show variables like '%time_zone%'; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | system_time_zone | UTC | | time_zone | Asia/Tokyo | +------------------+------------+ 2 rows in set (0.00 sec) mysql> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2020-03-29 13:39:05 | #2020-03-29 13:39:05に確認をとりました。 +---------------------+ 1 row in set (0.00 sec) ----------------------------------------------------------------------------------------------------------- ご提示してくださった`convert_tz`関数を使用して再度試してみたのですが同様のエラーが出力されてしまいました。 【posts.yml】---------------------------------------------------------------------------------------- convert_tz('<%= Time.zone.now %>', '+00:00','+09:00'); ----------------------------------------------------------------------------------------------------------- 何か問題点がございましたらご教授お願いします。
Orlofsky

2020/03/29 07:33

rails での記述方法はわたしはわかりません。他の人のコメントを期待しましょう。 一度使って終わり、ってデータならCSV?などのデータをあらかじめエディタなどでタイムゾーンを一致させてから取り込むことも考えられます。 教授 → 教示
ryouya

2020/04/01 12:07

度々ご返答遅れてしまい申し訳ございません。 はい、別の方法も検討してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問