MySQL不允许将VARCHAR作为主键?

5

我正在尝试创建一个名为“学生”的表,只有一个字段“student_name”。

“student_name”应该是一个VARCHAR类型的主键,因为我想通过学生的姓名来唯一地识别他们。

CREATE TABLE 'swinters'.'Students' (
  'student_name' VARCHAR NOT NULL,
  PRIMARY KEY ('student_name')
)
ENGINE = InnoDB;

MYSQL 错误编号 1064

您的SQL语法存在错误,请查看与您的MySQL服务器版本相对应的手册,以了解在第2行使用的正确语法。


那些单引号是复制粘贴错误吗?如果不是,请将它们删除。它们用于标识字符串字面量,您不能将其用于对象名称。 - user330315
为什么都要投票关闭呢?在我看来很合理啊。 - Eric J.
1
@EricJ。看看问题的编辑历史记录。有人删除了原始发表者的评论:“啊哈哈哈哈!我终于搞定了!抱歉我太菜了!需要将VARCHAR更改为VARCHAR(45)之类的东西。哇,对此表示抱歉!”由于原始发表者如此迅速地自行解决了问题,我投票关闭。 - Joe Stefanelli
1
这只是一个非常简单和愚蠢的问题。 - JNK
我在发布问题后立即回答了自己的问题,但我的编辑可能已被删除。 - user114518
4个回答

9
您需要指定 VARCHAR(N), 其中 N 是字符串的最大长度。

6

您需要提供VARCHAR列的长度。即 VARCHAR(255)


4

2
使用UNIQUE并祈祷John Smith不会报名? - Wooble
@Michael Durrant:只要你的BL中没有它,它就是代理的,根据定义。而我是在特别谈论汇率项目中的货币。那么,您会为保留货币名称的表创建代理PK吗?为什么? - zerkms
@MichaelDurrant::-S 回答这个问题真的那么难吗?!:-( 你会为货币创建代理整数 PK 吗(是/否)?为什么要这样做?(我尊重您的经验,但我很好奇业务 PK 与货币可能引起的真正问题) - zerkms
所以你建议人们遵循你的一般规则“不要将具有任何业务价值或含义的字段用作主键”,但是实际上,这个规则有例外。而且你同意这个问题并不简单。这让我感到困惑。 :-S - zerkms
@zerkms:我同意每个“规则”都有例外,但为什么不为货币创建代理整数主键呢? - Herbert
显示剩余3条评论

2

您必须指定该字段需要多少个字符,例如 VARCHAR(255)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接