1 2 3 4 5 6 7 8 9 | CREATE TABLE product_img ( img_no VARCHAR(10) PRIMARY KEY, seq VARCHAR(2) NOT NULL, file_name VARCHAR(100) NOT NULL, upload_date DATE NOT NULL, file_ext VARCHAR(10) NOT NULL, FOREIGN KEY (img_no) REFERENCES product(product_no) ); | cs |
이렇게 테이블을 생성하려고 하니, 오류가 난다.
Foregin 키가 호환이 되지 않는다. 즉, product 테이블의 product_no와 img_no의 타입이 맞지 않는 줄 알았다.
그래서 product 테이블의 product_no도 확인해봤지만 VARCHAR(10)이 분명했다.
SQL 오류 (1005): Can't create table 'shop'.'product_img' (errno:150 "Foreign key constraint is incorrectly formed") |
HeidiSQL 이라는 프로그램을 쓰고 있었는데, 여기서 product 테이블의 CREATE 코드를 볼 수 있었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | CREATE TABLE `product` ( `product_no` VARCHAR(10) NOT NULL, `register_date` DATE NOT NULL, `edit_date` DATE NOT NULL, `third_cate_no` SMALLINT(6) NOT NULL, `name` VARCHAR(50) NOT NULL, `price` SMALLINT(6) NOT NULL, `discount` SMALLINT(6) NOT NULL, `stat` VARCHAR(10) NOT NULL, `brand` VARCHAR(20) NULL DEFAULT NULL, `view_count` INT(11) NOT NULL, `sales` INT(11) NOT NULL, PRIMARY KEY (`product_no`), INDEX `third_cate_no` (`third_cate_no`), CONSTRAINT `product_ibfk_1` FOREIGN KEY (`third_cate_no`) REFERENCES `category_3` (`cate_no`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB ; | cs |
이 테이블을 생성하고 난 뒤에 데이터를 넣을 때 한글을 넣으려고 하니 안 되서, 테이블의 유니코드를 바꿔주는 작업을 했다.
하지만 ALTER 는 테이블 수정이니, 생성할 때 유니코드르 바로 맞춰주어야 한다.
ALTER TABLE table_name convert to charset utf8;
|
1 2 3 4 5 6 7 8 9 10 11 | CREATE TABLE product_img ( img_no VARCHAR(10) PRIMARY KEY, seq VARCHAR(2) NOT NULL, file_name VARCHAR(100) NOT NULL, upload_date DATE NOT NULL, file_ext VARCHAR(10) NOT NULL, FOREIGN KEY (img_no) REFERENCES product(product_no) ) COLLATE='utf8_general_ci' ; | cs |
테이블을 생성할 때 COLLATE='utf8_general_ci' 를 넣어주면 된다.