我想创建一个名为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
答案 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,
另外,某些列没有设置默认值,也为它们设置默认值。