-1

我不明白这有什么问题:

CREATE TABLE 'posts' (
  'IdPost' int(11) NOT NULL AUTO_INCREMENT,
  'IdUser' int(11) NOT NULL,
  'name' varchar(45) CHARACTER SET latin1 NOT NULL,
  'title' varchar(100) CHARACTER SET latin1 NOT NULL,
  'type' tinyint(4) NOT NULL,
  'address' varchar(30) CHARACTER SET latin1 NOT NULL,
  'lat' varchar(10) NOT NULL,
  'lon' varchar(10) NOT NULL,
  'url' varchar(30) NOT NULL,
  PRIMARY KEY ('IdPost')
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

我在我的服务器上收到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''posts' ( 'IdPost' int(11) NOT NULL AUTO_INCREMENT, 'IdUser' int(11) NOT NUL' at line 1

问题是什么?

4

3 回答 3

2

不要将表名或列名放在引号中。您必须对保留字使用反引号,而此表并非如此。

CREATE TABLE posts 
(
  IdPost int(11) NOT NULL AUTO_INCREMENT,
  IdUser int(11) NOT NULL,
  name varchar(45) CHARACTER SET latin1 NOT NULL,
  title varchar(100) CHARACTER SET latin1 NOT NULL,
  type tinyint(4) NOT NULL,
  address varchar(30) CHARACTER SET latin1 NOT NULL,
  lat varchar(10) NOT NULL,
  lon varchar(10) NOT NULL,
  url varchar(30) NOT NULL,
  PRIMARY KEY (IdPost)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
于 2013-10-19T18:45:32.293 回答
2

不要在表名中使用引号。还要从您的列名中删除所有引号。

演示 SQL 小提琴

附带说明:-

这里:-

当标识符是 SQL 保留字或包含空格或其他特殊字符时,引号很有用。引用标识符还可以使其完全是数字,而未引用的标识符则不是这样。要在带引号的标识符中包含标识符引号字符,请将其加倍。

于 2013-10-19T18:46:34.710 回答
0

这可以是另一种选择:

CREATE TABLE `posts` (
`IdPost` int(11) NOT NULL AUTO_INCREMENT,
`IdUser` int(11) NOT NULL,
`name` varchar(45) CHARACTER SET latin1 NOT NULL,
`title` varchar(100) CHARACTER SET latin1 NOT NULL,
`type` tinyint(4) NOT NULL,
`address` varchar(30) CHARACTER SET latin1 NOT NULL,
`lat` varchar(10) NOT NULL,
`lon` varchar(10) NOT NULL,
`url` varchar(30) NOT NULL,
 PRIMARY KEY (`IdPost`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

我建议使用back tilts而不是quotes

于 2013-10-19T18:55:13.057 回答