MySQL#1064语法错误咨询:用户表创建SQL语句问题排查
解决MySQL #1064语法错误:用户表创建语句修正
Got it,这个#1064语法错误其实很好排查——问题出在你对MySQL/MariaDB标识符的包裹方式上!
错误原因
MySQL里有明确的语法规则:
- 表名、列名这类标识符,要么用**反引号(`)**包裹,要么在标识符不是关键字/不含特殊字符时直接写(不需要任何包裹);
- 单引号(')是专门用来包裹字符串值的(比如你语句里
enum('0','1')的用法是完全正确的)。
你原来的语句错误地用单引号包裹了表名和所有列名,数据库会把这些当成字符串来解析,自然就触发语法错误了。
修正后的完整SQL语句
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `first_name` varchar(255) NOT NULL, `last_name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `sign_up_date` date NOT NULL, `activated` enum('0','1') NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
可选简化写法
如果你的标识符(比如users、id这些)都不是MySQL的关键字,也可以直接去掉所有反引号,代码会更简洁:
CREATE TABLE IF NOT EXISTS users ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(255) NOT NULL, first_name varchar(255) NOT NULL, last_name varchar(255) NOT NULL, email varchar(255) NOT NULL, password varchar(255) NOT NULL, sign_up_date date NOT NULL, activated enum('0','1') NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
内容的提问来源于stack exchange,提问作者clonte
相关产品推荐
相关产品推荐

