【问题标题】:Enum values and Error 1064枚举值和错误 1064
【发布时间】:2017-03-25 08:49:27
【问题描述】:

我有这个错误的问题。

这里是创建表的代码

CREATE TABLE `qa`.`question`(
  `id` INT(9) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` VARCHAR(256) CHARACTER SET utf16 COLLATE utf16_general_ci NOT NULL,
  `email` VARCHAR(512) NOT NULL,
  `phone` INT(11) NOT NULL,
  `content` TEXT NOT NULL,
  `status` ENUM(0) NOT NULL,
  PRIMARY KEY(`id`)
) ENGINE = InnoDB CHARSET = utf8 COLLATE utf8_general_ci;

我看到同样的问题,但它们都没有出现在我的代码中。

我也在考虑默认值,但我收到了这个:

id 值无效(错误 #1067)

【问题讨论】:

  • 你的标题说错误1064,但错误信息是1067。是哪个?
  • 你想用enum(0)实现什么?
  • 您通常不应该在ENUM() 中使用数字。阅读dev.mysql.com/doc/refman/5.7/en/enum.html 了解原因。

标签: mysql


【解决方案1】:

我无法重现您遇到的错误。我得到了一个不同的错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '0) NOT NULL 附近使用的正确语法,

这是因为ENUM 的元素必须是字符串,而不是数字。我把它改成:

  `status` ENUM('OK', 'FAIL') NOT NULL,

表创建成功。

如果您尝试为id 列分配默认值,则会发生错误,因为它也被声明为使用AUTO_INCREMENT。见#1067 - Invalid default value for 'bonusid' how can i fix this error?

【讨论】:

  • 谢谢!我在 phpMyAdmin 中编辑了 Enum 值,并在那里编写了字符串值,但在 sql 代码中我没有注意到它转为数字!解决了:)
  • ENUM 在 SQL 代码中不显示为数字,这只是它们在数据库中的存储方式。
猜你喜欢
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
相关资源
最近更新 更多