🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

2336閲覧

レンタルサーバのMySQLにてTIMESTAMPがエラーになる

Yt6623

総合スコア4

MySQL

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2021/05/06 06:16

レンタルサーバのMySQLのカラムを下記設定し、NULLをINSERTしようとしたところ、

名前     データ型      NULL   デフォルト値
created_at timestamp(6)  いいえ   CURRENT_TIMESTAMP(6)

以下のエラーが出ました。
Integrity constraint violation: 1048 Column 'created_at' cannot be null

調べていくと、MySQL自体の設定を変更すればエラーを回避できるようなのですが、
レンタルサーバを共同利用する契約の場合は共同利用者すべての設定が変わってしまうので難しいようでした。

NULLを項目を「いいえ」ではなく「はい」にすればINSERTは成功したのですが、created_atカラムは「NULL」という表記になってしまいます。

このカラムにINSERTしたときの現在時刻が自動で挿入されるようにするにはどうしたらよいでしょうか?

ちなみに、ローカル環境ではエラーにならなかったです。

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

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

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

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

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

sazi

2021/05/06 07:21

> MySQL自体の設定を変更すればエラーを回避 とは、どのような設定の事ですか?
Yt6623

2021/05/06 08:14

explicit_defaults_for_timestampをオンにする設定だそうです
sazi

2021/05/06 08:29 編集

それは定義上で、デフォルト値を指定しなくても暗黙的にcurrent_timestamp値が入るというものなので、insert時に値を指定しているのなら、関係ないですよ。
Yt6623

2021/05/06 08:30

TIMSTAMPはレコードが作成された時点で、自動的に現在時刻が入ってほしいので、 当該カラムに相当するINSERT項目は「NULL」としておりました。
sazi

2021/05/06 09:17 編集

> INSERT項目は「NULL」としておりました。 この場合項目に値を指定しないという意味ではなく、Nullを指定するという事になります。 default値は項目を省略された場合に、使用されます。
guest

回答1

0

ベストアンサー

この手のものはドキュメントを確認されたほうが良いです。
11.3.1 DATE、DATETIME、および TIMESTAMP 型
11.3.5 TIMESTAMP および DATETIME の自動初期化および更新機能

とはいえ、DEFAULTを設定していても意図的にNULLを入れようとしているのでしたら、NULLが入ります。
DEFAULT値を適用したいのでしたら、INSERTに「含まない」ことです。

投稿2021/05/06 07:03

m.ts10806

総合スコア80875

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

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

Yt6623

2021/05/06 08:15

INSERTに含まない方法で対処できました ありがとうございました
m.ts10806

2021/05/06 09:05

DEFAULTの意味を今一度考えた方が良いかと思います。 SQLに書いたNULLは「何も指定しない」ではなく「”NULLという値”を指定する」という認識がないと今後苦労すると思います。
Yt6623

2021/05/06 09:17

なるほどです 「何も指定しない」となるとどうなりますか?
m.ts10806

2021/05/06 09:21 編集

SQLに含まない です。 一般的なプログラムの「引数」に似ています。 まぁ値も「パラメータ」と言えるので、「引数」ですね。
Yt6623

2021/05/06 09:26

なるほどです!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問