Table 未使用默认值创建

Table is not being created with DEFAULT values

我想创建一个名为 review 的 table 和一些默认值,如下面的代码所示:

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);

此 table 的列应包含默认值,但如果写入默认值 table 则不会被创建。

现在,我通过使用以下内容删除默认值来替换我的代码:

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);

现在 table 正在完美创建,如果继续此操作(没有默认值)table 我在插入数据时得到 1364 MySQL error

我通过删除 phpmyadmin

中我的 sqlmode 设置的 STRICT_TRANS_TABLES,用 mysql error 1364 Field doesn't have a default values 临时解决了这个问题

我还尝试先创建 table,然后使用 ALTER TABLE 添加默认值,但这只能完成一次,并且不适合冗长的数据库..

但我不想更改我的 phpmyadmin 设置并使用 DEFAULT 列值创建 table。我该怎么做以及哪里做错了?

谢谢

纳瓦兹·古里

它确实没有保存到数据库中,因为字段 column_name(可能还有一些其他字段)被检查为 "NOT NULL"。这意味着该字段的值必须不是 NULL(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';

当然,请将您的字段类型与您要更改的字段相匹配。

SQL 有几个问题。首先是您尝试将日期默认为无效日期('0000-00-00' 不是有效日期)。同样对于文本字段,为什么将其设置为默认值 '',您不能为一些字段类型设置默认值 - 文本就是其中之一 (https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html)。

所以...

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 设置一些特定的日期。

其中一个问题可能是您在第一个块中遇到的问题是:

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

相反,您需要 0 不带引号:

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

还有,有些列没有设置默认值,也给它们设置默认值吧。