2012-01-25 93 views
4

我创造下在mysql中解决错误代码:1005无法创建表 ''(错误:150)错误

  1. POSTMASTER
  2. ADVERTISEMENT
  3. CANDIDATEMAIN
三个表

以下是创建语句

POSTMASTER

CREATE TABLE `postmaster` (
    `POSTCODE` int(2) NOT NULL DEFAULT '0', 
    `POSTNAME` varchar(250) DEFAULT NULL, 
    PRIMARY KEY (`POSTCODE`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

ADVERTISEMENT

CREATE TABLE `advertisment` (
    `ADVTNO` varchar(35) NOT NULL, 
    `ADVTDATE` date NOT NULL, 
    `POSTCODE` int(2) NOT NULL, 
    `ADVTOPENDATE` date NOT NULL COMMENT 'ADVERTISEMENT OPENING DATE', 
    `ADVTCLOSEDATE` date NOT NULL COMMENT 'ADVERTISEMENT CLOSING DATE', 
    `EDITCLOSEDATE` date NOT NULL COMMENT 'CLOSING DATE FOR EDITING APPLICATION', 
    `LASTREPRINTDATE` date NOT NULL COMMENT 'LAST DATE FOR REPRINTING APPLICATION', 
    `FEESCST` int(4) NOT NULL COMMENT 'FEE FOR SC/ST CATEGORY', 
    `FEESTAFF` int(4) DEFAULT NULL COMMENT 'FEE FOR STAFF ', 
    `FEEOBC` int(4) DEFAULT NULL COMMENT 'FEE FOR OBC CATEGORY', 
    `ADVOCATEEXPERIENCE` int(2) DEFAULT NULL, 
    PRIMARY KEY (`ADVTNO`,`ADVTDATE`,`POSTCODE`), 
    KEY `fk_post` (`POSTCODE`), 
    CONSTRAINT `fk_post` FOREIGN KEY (`POSTCODE`) REFERENCES `postmaster` (`POSTCODE`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

一切都到这里被罚款,但是当我去创造CANDIDATEMAIN表,收到错误

这里是CANDIDATEMAIN

CREATE TABLE `candidatemain` (

    `ADVTNO` varchar(35) NOT NULL DEFAULT '', 
    `ADVTDATE` date NOT NULL DEFAULT '0000-00-00', 
    `POSTCODE` int(2) NOT NULL DEFAULT '0', 
    `REGISTRATIONNO` int(6) NOT NULL DEFAULT '0', 
    `SALUTATION` varchar(10) NOT NULL, 
    `FULLNAME` varchar(90) NOT NULL, 
    `SURNAME` varchar(30) DEFAULT NULL, 
    `NAME` varchar(30) NOT NULL, 
    `LASTNAME` varchar(30) DEFAULT NULL, 
    `LASTUPDATEDIP` varchar(20) NOT NULL DEFAULT '', 
    `LASTUPDATEDDATE` date DEFAULT NULL, 
    `ENTRYDATE` date NOT NULL, 
    PRIMARY KEY (`ADVTNO`,`ADVTDATE`,`POSTCODE`,`REGISTRATIONNO`), 
    KEY `FK_ADVT` (`ADVTNO`, `ADVTDATE`,`POSTCODE`) , 
    CONSTRAINT `FK_ADVT` FOREIGN KEY (`ADVTNO`, `ADVTDATE`,`POSTCODE`) REFERENCES `advertisment` (`ADVTNO`, `ADVTDATE`,`POSTCODE`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

的错误,我得到的创建语句是:

Error Code: 1005. Can't create table 'dbName.candidatemain' (errno: 150) 

有什么能为这个错误的原因是什么?

优化版本的MySQL:的MySQL版本14.14 DISTRIB 53年5月1日,对于Win64的

+0

问题出在您的约束,按照:http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html说:***“1005(ER_CANT_CREATE_TABLE)无法创建如果错误消息指向错误150,表创建失败,因为外键约束未正确形成。“*** – Nanne

+0

是表名'advertisment'故意错误吗? –

+0

@Shiplu它只是一个错字! –

回答

7

创建advertisment表默认字符集为utf8;

LATIN1列并不等同于UTF8列。所以外键约束无法正确形成。因此1005 (ER_CANT_CREATE_TABLE)错误。

这是我的mysql日志。

mysql> CREATE TABLE `advertisment` (
    -> `ADVTNO` varchar(35) NOT NULL, 
    -> `ADVTDATE` date NOT NULL, 
    -> `POSTCODE` int(2) NOT NULL, 
    -> `ADVTOPENDATE` date NOT NULL COMMENT 'ADVERTISEMENT OPENING DATE', 
    -> `ADVTCLOSEDATE` date NOT NULL COMMENT 'ADVERTISEMENT CLOSING DATE', 
    -> `EDITCLOSEDATE` date NOT NULL COMMENT 'CLOSING DATE FOR EDITING APPLICATION', 
    -> `LASTREPRINTDATE` date NOT NULL COMMENT 'LAST DATE FOR REPRINTING APPLICATION', 
    -> `FEESCST` int(4) NOT NULL COMMENT 'FEE FOR SC/ST CATEGORY', 
    -> `FEESTAFF` int(4) DEFAULT NULL COMMENT 'FEE FOR STAFF ', 
    -> `FEEOBC` int(4) DEFAULT NULL COMMENT 'FEE FOR OBC CATEGORY', 
    -> `ADVOCATEEXPERIENCE` int(2) DEFAULT NULL, 
    -> PRIMARY KEY (`ADVTNO`,`ADVTDATE`,`POSTCODE`), 
    -> KEY `fk_post` (`POSTCODE`), 
    -> CONSTRAINT `fk_post` FOREIGN KEY (`POSTCODE`) REFERENCES `postmaster` (`POSTCODE`) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- <== This little change make it work. 
Query OK, 0 rows affected (0.06 sec) 

mysql> CREATE TABLE `candidatemain` (
    -> 
    -> `ADVTNO` varchar(35) NOT NULL DEFAULT '', 
    -> `ADVTDATE` date NOT NULL DEFAULT '0000-00-00', 
    -> `POSTCODE` int(2) NOT NULL DEFAULT '0', 
    -> `REGISTRATIONNO` int(6) NOT NULL DEFAULT '0', 
    -> `SALUTATION` varchar(10) NOT NULL, 
    -> `FULLNAME` varchar(90) NOT NULL, 
    -> `SURNAME` varchar(30) DEFAULT NULL, 
    -> `NAME` varchar(30) NOT NULL, 
    -> `LASTNAME` varchar(30) DEFAULT NULL, 
    -> `LASTUPDATEDIP` varchar(20) NOT NULL DEFAULT '', 
    -> `LASTUPDATEDDATE` date DEFAULT NULL, 
    -> `ENTRYDATE` date NOT NULL, 
    -> PRIMARY KEY (`ADVTNO`,`ADVTDATE`,`POSTCODE`,`REGISTRATIONNO`), 
    -> KEY `FK_ADVT` (`ADVTNO`, `ADVTDATE`,`POSTCODE`) , 
    -> CONSTRAINT `FK_ADVT` FOREIGN KEY (`ADVTNO`, `ADVTDATE`,`POSTCODE`) REFERENCES `advertisment ` (`ADVTNO`, `ADVTDATE`,`POSTCODE`) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
Query OK, 0 rows affected (0.12 sec) 
+0

非常感谢,但你能告诉我你是如何找出错误的吗?我的意思是说,有任何特定的软件,可以完全指出错误..因为错误1005'给出了一个非常模糊的错误图片...再次感谢! –

+0

不知道。只需扫描您的SQL查询。 –

1

FOREIGN KEY CONSTRAINT为表candidatemainadvertisment有不同的字符集,这将导致错误,让他们有相同的字符集。

相关问题