2014-10-01 2 views
14

나는 열의 잘못된 열 지정이을 topic_id이 MySQL의 오류가 발생하지 않도록 할 수 있습니까?이 MySQL 오류가 발생하지 않도록하려면 어떻게해야합니까? COLUMN 열의 열 지정자가 올바르지 않습니까?

MySQL의 오류 ...

#1063 - Incorrect column specifier for column 'topic_id' 

SQL 스키마 ...

CREATE TABLE discussion_topics (
    topic_id char(36) NOT NULL AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

답변

26

당신이 INT 또는 부동 소수점 유형,하지 CHAR로 열을 deifne 할 필요가 AUTO_INCREMENT를 사용하십시오.

AUTO_INCREMENT 만 사용 부호없는 값, 그것뿐만 아니라 UNSIGNED을 사용하는 것이 좋다 단계;

CREATE TABLE discussion_topics (

    topic_id INT NOT NULL unsigned AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 
+0

어쩌면 내가 게으른거야하지만 더미 측면에서의 차이를 정의 할 수있는 쉬운 1-2 문장 방법이있는 문서에 지적, 나는이를 놓친 문서를 통해 감사를 감추고 줄 알았는데 'UNSIGNED'와'SIGNED'에 대해 불행히도 그게 무슨 의미인지 모르겠지만 지금은 한 시간 정도 읽을 시간이 없습니까? – JasonDavis

+2

글쎄, 클래식 INT를 정의하면 -2147483648에서 2147483647 사이의 값을 가지지 만 자동 증가 값은 더하기 부호로만 서명 될 수 있으므로 부호없는을 사용할 때 mysql은 0에서 4294967295까지의 숫자를 예상하며 INT는 4KB입니다 그 같은 4kb에서, 당신은 두 번 더 많은 항목을 사용할 수 있습니다 :) 당신이 이해하기를 바랍니다 –

2

doc을 인용 : 일부 속성은 모든 데이터 유형에 적용되지 않습니다

. AUTO_INCREMENT은 정수 및 부동 소수점 유형에만 을 적용합니다. DEFAULTBLOB 또는 TEXT 유형을 적용되지 않습니다. 귀하의 경우에는

, 당신은 charAUTO_INCREMENT 수정을 적용하려고 노력하고 있습니다. 이 문제를 해결하려면 AUTO_INCREMENT을 모두 삭제하십시오 (즉, 응용 프로그램 수준에서 고유 한 ID를 생성해야 함). 또는 topic_id 유형을 관련 정수 1으로 변경하십시오.

옆줄로 char(36)에 게시물 이 (가)으로 저장되어 있으므로 열 유형을 변경해야 할 수도 있습니다. 당신은 정수 오버 플로우를 방지하기 위해이 길을가는 것처럼 보이는 -하지만 경우에 당신이 하나의 주제에 이상 18446744073709551615 게시물 (BIGINT UNSIGNED 컬럼에 저장 될 수있는 가장 큰 수)를 상대하고, 당신은 당신의 측면에서 훨씬 더 큰 문제가 아마.)

auto_increment 특성은 숫자 열 (정수 및 부동 소수점 작동
+0

나는 그것을 알고! 그런데 그게 문제가 될하지만 너무 – JasonDavis

5

),하지 char 열 :

CREATE TABLE discussion_topics (
    topic_id INT NOT NULL AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 
2

char 값을 자동 증가시킬 수 없습니다. int 또는 long (정수 또는 부동 소수점)이어야합니다.

CREATE TABLE discussion_topics (
    topic_id int(5) NOT NULL AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (`topic_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

희망이

+0

int (36)? 안돼! : D –

+0

그건 실수였습니다. M.Svrcek 감사합니다. – codebot

2

저도 같은 문제가 있지만, 롱 타입을 사용했는데 도움이 함께보십시오. 나는 INT를 위해 변했고 그것은 나를 위해 일했다.

CREATE TABLE lists (
id INT NOT NULL AUTO_INCREMENT, 
desc varchar(30), 
owner varchar(20), 
visibility boolean, 
PRIMARY KEY (id) 
);