【问题标题】:What's wrong with this simple MySQL CREATE TABLE statement?这个简单的 MySQL CREATE TABLE 语句有什么问题?
【发布时间】:2011-07-22 04:19:56
【问题描述】:

这是我在 PHPMyAdmin 中编写的一个简单的 CREATE TABLE 语句。好的,我知道我可以在 PHPMyAdmin 中以简单的方式做到这一点,但我喜欢完全控制。声明如下:

CREATE TABLE profile
(
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
type int(1) NOT NULL,
view int(1) NOT NULL default '1',
ver int(1) NOT NULL default '2',
email NOT NULL varchar(32),
password NOT NULL varchar(16),
first varchar(32),
last varchar(32),
site varchar(64),
address varchar(32),
city varchar(32),
zip int,
state char(2),
country varchar(50),
about text,
datereg int(20)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

【问题讨论】:

  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 8 行的 'NOT NULL varchar(32), password NOT NULL varchar(16), first varchar(32), last ' 附近使用正确的语法
  • 为什么使用字符串'1' 和'2' 作为整数列的默认值? MySQL 可能会接受它,但这是一个坏习惯。

标签: mysql phpmyadmin create-table


【解决方案1】:

我换了

view int(1) NOT NULL default '1',
ver int(1) NOT NULL default '2',
email NOT NULL varchar(32),
password NOT NULL varchar(16),

与

view int(1) NOT NULL default 1,
ver int(1) NOT NULL default 2,
email varchar(32) NOT NULL ,
password varchar(16) NOT NULL ,

成功了

【讨论】:

  • 啊哈!谢谢,好收获。伙计,我终于可以睡觉了,哈哈。
【解决方案2】:

导致你的 SQL 语句不工作的错误不止一个。

试试这个:

CREATE TABLE `profile` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` int(1) NOT NULL,
  `view` int(1) NOT NULL DEFAULT '1',
  `ver` int(1) NOT NULL DEFAULT '2',
  `email` varchar(32) NOT NULL,
  `password` varchar(16) NOT NULL,
  `first` varchar(32),
  `last` varchar(32),
  `site` varchar(64),
  `address` varchar(32),
  `city` varchar(32) ,
  `zip` int(11),
  `state` char(2),
  `country` varchar(50),
  `about` text,
  `datereg` int(20),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

一些补充:

【讨论】:

    【解决方案3】:

    试试这个 =)

    CREATE TABLE `db`.`profile` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `type` INT(1) NOT NULL ,
      `view` INT(1) NOT NULL DEFAULT 1 ,
      `ver` INT(1) NOT NULL DEFAULT 2 ,
      `email` VARCHAR(32) NULL ,
      `password` VARCHAR(16) NULL ,
      `first` VARCHAR(32) NULL ,
      `last` VARCHAR(32) NULL ,
      `site` VARCHAR(64) NULL ,
      `address` VARCHAR(32) NULL ,
      `city` VARCHAR(32) NULL ,
      `zip` INT NULL ,
      `state` CHAR(2) NULL ,
      `country` VARCHAR(50) NULL ,
      `about` TEXT NULL ,
      `datereg` INT(20) NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = MyISAM DEFAULT CHARSET=utf8;
    

    【讨论】:

      【解决方案4】:

      view 是一个 MySQL 关键字。如果你想使用同名的列,你必须用反引号括起来,比如

      `view` int(1) NOT NULL default 1,
      

      【讨论】:

      • 我尝试使用反引号(在所有列名上),甚至将所有列名切换为非 MySQL 关键字,但没有成功。
      • NOT NULL 也应该在类型之后。查看@Bjoern 的回答
      【解决方案5】:

      如果没有看到错误是什么,我会说它失败了,因为您尝试使用 MySQL 保留关键字命名列 - 我猜是 view

      如果您在列名周围放置反引号`,它将允许您使用保留字。 请记住,该表上的任何其他查询也需要使用保留字的列名周围的反引号。

      例如。

      CREATE TABLE profile
      (
      `id` int NOT NULL AUTO_INCREMENT,
      PRIMARY KEY(id),
      `type` int(1) NOT NULL,
      `view` int(1) NOT NULL default '1',
      `ver` int(1) NOT NULL default '2',
      `email` NOT NULL varchar(32),
      `password` NOT NULL varchar(16),
      `first` varchar(32),
      `last` varchar(32),
      `site` varchar(64),
      `address` varchar(32),
      `city` varchar(32),
      `zip` int,
      `state` char(2),
      `country` varchar(50),
      `about` text,
      `datereg` int(20)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      

      【讨论】:

      • 我尝试使用反引号(在所有列名上),甚至将所有列名切换为非 MySQL 关键字,但没有成功。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 2017-12-24
      相关资源
      最近更新 更多