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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

5153閲覧

Laravel SQLSTATE[HY000]: General error: 1364 Field 'birthday1' doesn't have a default value

jiro-

総合スコア28

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/11/08 15:55

前提・実現したいこと

今までエラーなく会員登録が行えていたのに急にこのエラーが発生しました。
同エラー検索し、試してみたこと
➀config/database.phpの'strict' => true,をfalseに変更。
➁UsersTableの$table->string('birthday1');に->nullableを追加
を試してみましたが解決できませんでした。
ご教示よろしくお願い致します。

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

SQLSTATE[HY000]: General error: 1364 Field 'birthday1' doesn't have a default value

該当のソースコード

User.php

<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'kname', 'email', 'password', 'gender', 'birthday1', 'birthday2', 'birthday3', 'tel', 'postal_code', 'area', 'prefectures_name', 'city', 'subsequent_address' ]; protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'email_verified_at' => 'datetime', ]; }

Users_Table

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('kname')->comment('フリガナ'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('gender')->length(2); $table->string('birthday1')->nullable(); $table->string('birthday2'); $table->string('birthday3'); $table->string('tel'); $table->string('postal_code'); $table->string('prefectures_name'); $table->string('city'); $table->string('subsequent_address'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }

register.blade.php

@extends('layouts.layout') @section('title', '会員登録入力') @section('content') <div class="container mt-5 pt-5"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header"><h4>会員情報登録</h4><p>以下のフォームの項目を入力し、よろしければ「確認画面に進む」ボタンをクリックしてください</p></div>    <div class="card-body">   <form name="form" method="post" action="{{ route('register_confirm') }}"> @csrf <!--省略--> <div class="form-group row"> <label for="birthday1" class="col-md-4 col-form-label text-md-right">生年月日</label> <div class="col-sm-2"> <input type="birthday1" class="form-control" name="birthday1" pattern="[0-9]*" size="4" maxlength="4" placeholder="例) 1980" value="{{ old('birthday1') }}" autofocus> @if($errors->has('birthday1')) <p class="text-danger">{{ $errors->first('birthday1') }}</p> @endif </div> 年 <div class="col-sm-2"> <input type="birthday2" class="form-control" name="birthday2" pattern="[0-9]*" size="2" maxlength="2" placeholder="01" value="{{ old('birthday2') }}" autofocus> @if($errors->has('birthday2')) <p class="text-danger">{{ $errors->first('birthday2') }}</p> @endif </div> 月 <div class="col-sm-2"> <input type="birthday3" class="form-control" name="birthday3" pattern="[0-9]*" size="2" maxlength="2" placeholder="01" value="{{ old('birthday3') }}" autofocus> @if($errors->has('birthday3')) <p class="text-danger">{{ $errors->first('birthday3') }}</p> @endif </div> 日 </div>

register_confirm.blade.php

@extends('layouts.layout') @section('title', '会員登録確認') @section('content') <div class="container mt-5 pt-5"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header"><h4>会員登録情報確認</h4> <p>下記内容でよろしければ「この内容で登録する」ボタンを押してください<br>修正が必要な場合は、「入力内容修正」ボタンを押してください</p> </div> <div cclass="card-body"> <form method="post" action="{{ route('register_complete') }}"> @csrf <!--省略--> <div class="form-group row ml-5"> <label for="birthday1" class="col-md-4">生年月日</label> <div class="col-ms-2"> {{ $register_data['birthday1'] }}年 <input name="birthday1" type="hidden" value="{{ $register_data['birthday1']}}"> </div> <div class="col-ms-2"> {{ $register_data['birthday2'] }}月 <input name="birtthday2" type="hidden" value="{{ $register_data['birthday2']}}"> </div> <div class="col-ms-2"> {{ $register_data['birthday3'] }}日 <input name="birtthday3" type="hidden" value="{{ $register_data['birthday3']}}"> </div> </div>

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

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

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

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

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

guest

回答1

0

ベストアンサー

MySQL 5.6 で「General error: 1364 Field ‘xxx’ doesn’t have a default value」が出る問題の解決方法

AUTOINCREMENT 属性

はbirthday1だから付けていないでしょう。

birthday1のNOT NULL 制約を外すか、必ずbirthday1に値を設定しては?

投稿2019/11/08 16:12

Orlofsky

総合スコア16415

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

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

jiro-

2019/11/08 16:27

ご返答ありがとうございます。 mysql> mysql> ALTER TABLE users ALTER COLUMN birthday1 DROP NOT NULL; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 1 mysql> ALTER TABLE users ALTER COLUMN 'birthday1' DROP NOT NULL; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''birthday1' DROP NOT NULL' at line 1 アドバイス通り実行してみましたが今度はターミナルでこのようなエラーが発生しました。このエラーの対処法を検索してみます
jiro-

2019/11/08 16:31

mysqlのバージョンは5.7.26です
jiro-

2019/11/08 17:13

mysql> SHOW CREATE TABLE users; | Table | Create Table | users | CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `kname` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'フリガナ', `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `email_verified_at` timestamp NULL DEFAULT NULL, `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `gender` varchar(2) COLLATE utf8mb4_unicode_ci NOT NULL, `birthday1` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `birthday2` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `birthday3` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `tel` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `postal_code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '郵便番号', `prefectures_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '都道府県名', `city` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '市区町村', `subsequent_address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'その以降の住所', `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_email_unique` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 1 row in set (0.00 sec) と出力されました。NOT NULL制約はついているように見えます。
jiro-

2019/11/08 17:21

mysql> ALTER TABLE users MODIFY birthday1 TEXT CHARACTER SET utf8; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 は指定できましたが SQLSTATE[HY000]: General error: 1364 Field 'birthday1' doesn't have a default value このエラーは解決できませんでした。
takepan1973

2019/11/08 21:57

ALTER TABLE~MODIFY文のところ、「は指定できましたが」と書いてありますが、SHOWでNOT NULL制約が外れていることを、確認しましたか?
jiro-

2019/11/09 02:48

今起きてブラウザを再度立ち上げたら解決しました。 もう一度SHOW CREATE見てなかったので mysql> SHOW CREATE TABLE users;すると `birthday1` text CHARACTER SET utf8, に変更できていましたm(__)m すいません。今回OrlofskyさんにSHOW CREATEを教えてもらうまでデータ型のNOT NULL指定を見れる事を知りませんでした。次回からデータベースの問題が起こった時には、質問に入れていくようにします DATE型で指定できる事も知りませんでした。 貼って頂いたリンクを見させて頂きましたが、難しく理解できませんでした。DATE型にしておくと、->format()などで生年月日から年齢を表示させたりという使い方ができるという事でしょうか? ありがとうございました。 ご丁寧に追加のアドバイスも頂き知識も増やす事ができました!
jiro-

2019/11/09 12:22

DATE_FORMAT,str_to_date関数確認しました。 今ECサイト作成しており週推移、月推移、年推移などに使えそうなので知れてよかったです。 本当にご丁寧にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問