Search code examples
mysqlmysql-error-1005

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


I am creating following three tables in mysql

  1. POSTMASTER
  2. ADVERTISEMENT
  3. CANDIDATEMAIN

Here are the create statements

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

Everything till here is fine but when I go for creation of the CANDIDATEMAIN table I get error

Here is the create statement of 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

The Error I get is :

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

What could be the reason for this error?

MYSql Verion: mysql Ver 14.14 Distrib 5.1.53, for Win64


Solution

  • Create advertisment table with default charset as utf8;

    latin1 columns are not equivalent to utf8 columns. So foreign key constraint can not form correctly. Hence the 1005 (ER_CANT_CREATE_TABLE) error.

    Here is my mysql log.

    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)