【发布时间】:2020-06-16 12:15:21
【问题描述】:
美好的一天,我正在我的数据库上创建一些表,当我尝试保存时,它会抛出这个错误
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '0) NOT NULL 、
date_registeredDATETIME NOT NULL 、last_loginTIMESTAMP NOT' 附近使用正确的语法
这种错误之前已经在 Stackoverflow 上调试过here,解决方案是从 TIMESTAMP 列中删除长度。其他解决方案要求建议应从列标识符中删除引号或应使用刻度。不幸的是,我的 DATETIME 和 TIMESTAMP 列没有长度,而且我的列标识符周围有刻度。
这是我的 SQL 语句的样子。有人可以帮忙吗?
CREATE TABLE `inventoryman_db`.`users`
( `id` INT NOT NULL AUTO_INCREMENT ,
`full_name` VARCHAR(255) NOT NULL ,
`email` VARCHAR(255) NOT NULL ,
`password` VARCHAR(300) NOT NULL ,
`usertype` ENUM(0) NOT NULL ,
`date_registered` DATETIME NOT NULL ,
`last_login` TIMESTAMP NOT NULL ,
`notes` VARCHAR(255) NOT NULL COMMENT 'For verification and other purposes, we will store a random key here' ,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
【问题讨论】:
-
枚举是你需要的字符串
usertypeENUM('0') -
您的
ENUM只有一个选项。 MySQL 可能需要 2 个或更多。如果您只想保存 0,请使用TINYINT -
问题实际上出在 ENUM 上,而不是 date_registered。 ENUM 的创建方式与其他列不同——您实际上必须指定所有可能的值,这些值应该被引用。见dev.mysql.com/doc/refman/8.0/en/enum.html。也就是说,ENUM 非常困难和烦人(数字作为严格的字符串工作,所以
0与'0'不匹配),您需要修改表以添加任何值。你最好使用字符串或整数,并用你的代码控制值。 -
谢谢,它成功了。最初,我将 ENUM 值设置为“Admin”和“User”,但不知何故 SQL 语句没有捕获它,所以我不得不在语句中手动输入它们。我是这样做的
ENUM('Admin', 'User') NOT NULL并且它有效。再次感谢。