未使用DEFAULT值创建表

时间:2017-11-29 07:39:49

标签: php mysql phpmyadmin default-value

我想创建一个名为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值表。

现在,我通过删除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将ADD默认为它,但这只能执行一次而且对于冗长的数据库不正确。

但我不想更改我的phpmyadmin设置并使用DEFAULT列值创建表。我怎么能这样做以及我做错了什么?

由于

Nawaz Ghori

2 个答案:

答案 0 :(得分:1)

SQL存在一些问题。首先是您尝试默认为无效日期('0000-00-00'不是有效日期)。另外,对于文本字段,为什么将其设置为默认值为'',您无法为少数字段类型设置默认值 - 文本就是其中之一(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设置一些特定日期。

答案 1 :(得分:0)

问题之一可能是你有第一个块是:

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

相反,你需要0没有引用:

............................ DEFAULT 0,   

另外,某些列没有设置默认值,也为它们设置默认值。