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,
还有,有些列没有设置默认值,也给它们设置默认值吧。
我想创建一个名为 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,
还有,有些列没有设置默认值,也给它们设置默认值吧。