【问题标题】:SQL Syntax Error whilst creating a table创建表时出现 SQL 语法错误
【发布时间】:2010-09-11 17:33:12
【问题描述】:

我最近开始学习 SQL,我无法确定是什么导致了我的语法错误(见下文):

CREATE TABLE Users(
    user_id smallint not null auto_increment,
    username varchar(50) unique,
    password varchar(41),
    dob date,
    session_id varchar not null,
    cookie varchar not null,
    PRIMARY KEY(user_id),
    CONSTRAINT dob_valid CHECK(dob < current_date())
);

当所有 varchar 字段都具有预定义的长度时,这确实有效。 varchar 类型的所有字段都需要大小参数吗?

如果这个问题看起来很简单,我很抱歉。

提前感谢您的帮助

【问题讨论】:

  • 它说明了导致语法错误的原因。在错误消息中

标签: sql mysql mysql-error-1064


【解决方案1】:

是的,所有 varchar 都需要最大大小。

【讨论】:

  • 啊,谢谢,char 数据类型也一样。如果不知道这个字段的大小应该怎么办?
  • 感谢 alex martelli 回答了自己的问题,这是一个非常有用的帖子!
【解决方案2】:

正如the docs 所说,

CHAR 和 VARCHAR 类型是 声明的长度表示 你的最大字符数 想要存储。

另一种检查方式(长度是可选的):检查syntax(对于CREATE TABLE)上相关文档页面中的data_type生产,你会看到,部分:

 VARCHAR(length)
      [CHARACTER SET charset_name] [COLLATE collation_name]

看到了吗? (length) 部分 not 在此语法描述中的方括号内:这意味着它是 not 可选的,而是强制性的(CHARACTER SETCOLLATE 部分 可选的,所以它们在方括号内)。

我正在详细解释这种阅读文档的技巧,因为虽然学习这个非常具体的用例的特定语法当然很重要,但学习阅读手册并找到问题的答案(语法和其他)以非常快速的方式更为重要,这将极大地提高您的 SQL 生产力。

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2012-04-10
    • 2018-06-14
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多