I am creating following three tables in mysql
- POSTMASTER
- ADVERTISEMENT
- 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
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)
Your FOREIGN KEY CONSTRAINT
for table candidatemain
and advertisment
has different charset, this causes the error, let them have same charset.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With