2017-11-29 29 views
0

で表が作成されていない、私はいくつかのデフォルトのように次のコードに示すとreviewという名前のテーブルを作成したい:この表のDEFAULT値

mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` (
      `clients_id` int(15) NOT NULL AUTO_INCREMENT, 
      `client_id` varchar(150) NOT NULL DEFAULT '', 
      `rating` tinyint(2) NOT NULL DEFAULT '0', 
      `proj_date` date NOT NULL DEFAULT '0000-00-00', 
      `proj_desc` text NOT NULL DEFAULT '', 
      `photoname` text NOT NULL, 
      `companyname` text NOT NULL, 
      `feedback` text NOT NULL, 
      `status` tinyint(1) NOT NULL DEFAULT '0', 
      `emailid` varchar(100) NOT NULL DEFAULT '', 
      `customratings` varchar(100) NOT NULL DEFAULT '', 
      `photo_option` varchar(100) NOT NULL DEFAULT '', 
      `title` varchar(100) NOT NULL DEFAULT '', 
      `citation` varchar(100) NOT NULL DEFAULT '', 
      `date_option` varchar(100) NOT NULL DEFAULT '', 
      `rating_option` varchar(100) NOT NULL DEFAULT '', 
      PRIMARY KEY (`clients_id`), 
      FULLTEXT KEY `feedback` (`feedback`) 
      ) ENGINE=MyISAM AUTO_INCREMENT=1") or mysqli_error($link); 

列DEFAULT値が含まれている必要がありますが、書き込みDEFAULTの場合値テーブルが作成されていません。

は今、私は次のようにデフォルト値を除去することによって、自分のコードを置き換える:

mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` (
     `clients_id` int(15) NOT NULL AUTO_INCREMENT, 
     `client_id` varchar(150) NOT NULL, 
     `rating` tinyint(2) NOT NULL, 
     `proj_date` date NOT NULL, 
     `proj_desc` text NOT NULL, 
     `photoname` text NOT NULL, 
     `companyname` text NOT NULL, 
     `feedback` text NOT NULL, 
     `status` tinyint(1) NOT NULL, 
     `emailid` varchar(100) NOT NULL, 
     `customratings` varchar(100) NOT NULL, 
     `photo_option` varchar(100) NOT NULL, 
     `title` varchar(100) NOT NULL, 
     `citation` varchar(100) NOT NULL, 
     `date_option` varchar(100) NOT NULL, 
     `rating_option` varchar(100) NOT NULL, 
     PRIMARY KEY (`clients_id`), 
     FULLTEXT KEY `feedback` (`feedback`) 
     ) ENGINE=MyISAM AUTO_INCREMENT=1") or mysqli_error($link); 

今の表は、完全に作成されており、この(デフォルトなし)テーブルを続ける場合、私は1364 MySQL error挿入しながらデータ

を取得しています私も最初の表を作成し、使用することによって、それにデフォルトを追加しようとした

一時的

私はphpmyadminの中で私のsqlmode設定のSTRICT_TRANS_TABLESを削除することによってmysql error 1364 Field doesn't have a default valuesでこれを修正しますALTER TABLEですが、これは一度だけ行うことができ、長いデータベースでは正しくありません。

しかし、私はphpmyadmin設定を変更してDEFAULT列の値を持つテーブルを作成したくありません。どうすればいいですか、どこで間違っているのですか?

おかげフィ​​ールドcolumn_name(そしておそらくいくつかの他は) "NOT NULL" としてチェックされているので、それは間違いなく、データベースに保存していない

ナワズGhori

+0

空の文字列のデフォルト値は許可されない可能性があります – serakfalcon

+0

1つのヒントは、phpmyadminのようなものでSQLを実行しようとすることです。これはエラーを表示し、別のものを試すことができます。それから、あなたのPHPコードにそれを含めるようにしてください。 –

答えて

1

SQLにはいくつかの問題があります。最初のものは、無効な日付( '0000-00-00'は有効な日付ではありません)に日付を付けることです。また、テキストフィールドで、デフォルト値 ''に設定すると、いくつかのフィールドタイプにデフォルト値を設定することはできません。テキストはその1つ(https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html)です。

SO ...

CREATE TABLE IF NOT EXISTS `review` (
      `clients_id` int(15) NOT NULL AUTO_INCREMENT, 
      `client_id` varchar(150) NOT NULL DEFAULT '', 
      `rating` tinyint(2) NOT NULL DEFAULT '0', 
      `proj_date` date NOT NULL DEFAULT '1900-01-01', 
      `proj_desc` text NOT NULL, 
      `photoname` text NOT NULL, 
      `companyname` text NOT NULL, 
      `feedback` text NOT NULL, 
      `status` tinyint(1) NOT NULL DEFAULT '0', 
      `emailid` varchar(100) NOT NULL DEFAULT '', 
      `customratings` varchar(100) NOT NULL DEFAULT '', 
      `photo_option` varchar(100) NOT NULL DEFAULT '', 
      `title` varchar(100) NOT NULL DEFAULT '', 
      `citation` varchar(100) NOT NULL DEFAULT '', 
      `date_option` varchar(100) NOT NULL DEFAULT '', 
      `rating_option` varchar(100) NOT NULL DEFAULT '', 
      PRIMARY KEY (`clients_id`), 
      FULLTEXT KEY `feedback` (`feedback`) 
      ) ENGINE=MyISAM AUTO_INCREMENT=1 

は、作業を行います。

ただし、特定の日付をproj_dateに設定することができます。

+0

気づいてくれてありがとう!! ..それは簡単なミスをしている私は馬鹿だった –

1

。あなたのフィールドが必要な場合(最初のチェック

マークを自分フィールドNULLとして:それはあなたが2つのオプションを持っていることを意味し

- それは、そのフィールドの値がNULL(すべてのデータなしNULL)以外のものでなければならないことを意味しますいくつかの価値を持っているかどうか)。

ALTER TABLE your_table CHANGE COLUMN your_field your_field VARCHAR(250) NULL; デフォルト値をフィールドに追加すると、挿入されたデータがない場合は、定義した内容が格納されます。たとえば、次のように

ALTER TABLE your_table CHANGE COLUMN your_field your_field VARCHAR(250) NOT NULL DEFAULT 'some_default_value';

そしてもちろん、あなたが変更しようとしているフィールドに自分のフィールドの型と一致します。

0

問題の一つは、あなたが最初のブロックで持っているかもしれませんがある:

`rating` tinyint(2) NOT NULL DEFAULT '0', 
.... 
`status` tinyint(1) NOT NULL DEFAULT '0', 

代わりに、あなたが引用符なし0を持っている必要があります:

も、デフォルト値が設定されていない
............................ DEFAULT 0, 

いくつかの列については、それらのデフォルトも設定します。