创建表时发生SQL语法错误

创建表时发生SQL语法错误,sql,mysql,mysql-error-1064,Sql,Mysql,Mysql Error 1064,我最近开始学习SQL,我无法确定是什么导致了我的语法错误(见下文): 创建表用户( 用户id smallint非空自动增量, 用户名varchar(50)唯一, 密码varchar(41), dob日期, 会话\u id varchar不为空, cookie varchar不为空, 主键(用户id), 约束dob\u有效检查(dob

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

创建表用户(
用户id smallint非空自动增量,
用户名varchar(50)唯一,
密码varchar(41),
dob日期,
会话\u id varchar不为空,
cookie varchar不为空,
主键(用户id),
约束dob\u有效检查(dob<当前日期())
);
当所有varchar字段都具有预定义的长度时,这一点就起作用了。varchar类型的所有字段都需要大小参数吗

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


提前感谢您的帮助

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

如前所述

CHAR和VARCHAR类型是 声明的长度表示 您可以使用的最大字符数 我想去商店

另一种检查方法(长度不是可选的):检查(对于
创建表
)上相关文档页面中的
数据类型
生产,您将部分看到:

 VARCHAR(length)
      [CHARACTER SET charset_name] [COLLATE collation_name]
看到了吗?在本语法描述中,
(长度)
部分不在方括号内:这意味着它不是可选的,而是必须的(字符集和
校对
部分是可选的,所以它们在方括号内)


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

它说明了导致语法错误的原因。在错误消息中,谢谢,这与char数据类型相同。如果你不知道这个领域会有多大,你该怎么办?感谢alex martelli,这是一篇非常有用的帖子,回答了自己的问题!
 VARCHAR(length)
      [CHARACTER SET charset_name] [COLLATE collation_name]