2009-10-03 3 views
0

의 MySQL 데이터베이스에 열을 만들 수 없습니다. RSS 피드에서 항목을 보관할 테이블을 만들고 '설명'열을 만들어야합니다. 이 열에 인덱스가없는 제한없이 TEXT로 데이터 유형을 선택했습니다.데이터 형식이 TEXT 인

#1170 - BLOB/TEXT column 'description' used in key specification without a key length 

나는이 칼럼에 대해 지정한 길이가 내가 가진 첫 번째 오류를 반환 : I 색인이 열을 선택하면

#1071 - Specified key was too long; max key length is 1000 bytes 

, 나는이 오류 메시지가 : 이것은 내가지고있어 오류입니다 . 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 감사!

UPDATE :

내가 MySQL은 5.0.4

사용하고 여기에 내가 테이블 만드는 데 사용하고 쿼리입니다 : 그것은 잠시에서 비록

CREATE TABLE `feed_items` (

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`feed_id` INT NOT NULL COMMENT '`feeds`.`id`', 
`guid` VARCHAR(255) NOT NULL , 
`publish_date` DATETIME NOT NULL , 
`update_of` INT NULL COMMENT '`feed_items`.`id`', 
`link` VARCHAR(255) NOT NULL , 
`title` VARCHAR(255) NOT NULL , 
`description` TEXT NOT NULL , 
`comments_link` VARCHAR(255) NULL , 
INDEX ( `feed_id` , `guid` , `publish_date` , `update_of` , `title`) 
) ENGINE = MYISAM 
+1

사용하려고하는 길이는 어느 정도입니까? 열 생성 명령을 보여줄 수 있습니까? 어떤 MySQL 버전입니까? –

+0

CREATE TABLE 문이 도움이 될 수 있습니다. –

+0

5.0.4를 사용하고 있습니다. 다음 쿼리는 다음과 같습니다 이 표'feed_items' ( 'id'이 NOT NULL AUTO_INCREMENT PRIMARY KEY가, 'feed_id'이 NULL COMMENT ''feeds'를하지 INT INT를 만들 수 있습니다.id'' ',' guid' VARCHAR (255) 'publish_date' DATETIME NOT NULL, NULL NOT, 'update_of' INT의 NULL 주석'feed_items'.'id' '' link' VARCHAR (255) NOT NULL, 'title' VARCHAR (255) NOT NULL, 'description'의 TEXT NULL NOT, 'comments_link' VARCHAR (255) NULL, INDEX (feed_id'''guid''publish_date''update_of', 'title') ) ENGINE = MYISAM – Kylee

답변

1

는, 이 버그 보고서는에 문제가있는 것을 보인다 :이 버그에 대한 의견을 읽을 수 있습니다 http://bugs.mysql.com/bug.php?id=4541

을하고, 이 에러를 얻는데 사용한 명령어를 보지 않고서도 도움이되기 힘들거나, 어떤 버전의 mysql을 알지도 못하기 때문에 그들이 당신의 상황을 언급하고 있는지 확인하십시오.

UPDATE : 쿼리를 기반으로, 당신은 첫 번째를 제거 할 수 있습니다 :

다음
INDEX ( `feed_id` , `guid` , `publish_date` , `update_of` , `title`) 

, 일을 시도 :이 같은 긴 인덱스를 볼 때

INDEX ( `feed_id`) 

내가 의심받을. 당신이

SELECT * FROM table WHERE feed_id=? AND guid=? AND publish_date=? AND update_of=? and title=? 

다음이 지수는 쓸모가없는 한, 그래서

이상적으로 당신은 당신이에 선택을 색인을하고있을 것입니다해야하는지. FEED_ID 기본 키이기 때문에 고유 한 행을 반환합니다 당신은

SELECT * FROM table where feed_id=? 

을 수행해야합니다.

그래서 위의 색인은 필요한 것입니다. 제목과 아마도 publish_date에 별도의 색인을 원할 수도 있습니다.

작성중인 쿼리를 살펴보고 인덱스가 어디에 있어야하는지 확인할 수 있습니다. 더 많은 행을 추가 할 때 인덱스가 비싸게 들리므로 너무 많이 인덱싱하지 않아도되지만 너무 작게 인덱스하는 것은 쓸모가 없습니다. 따라서 인덱스를 어디에 있는지 결정한 다음 쿼리를 살펴 보는 것이 좋습니다.

+0

질문에 업데이트 된 정보를 게시했습니다. 오류는 최대 키 길이가 1000임을 나타냅니다.이 키는 열이 인덱싱되고 있지만 설명 열에 인덱스가 지정되어 있지 않다는 것을 의미한다고 가정합니다. 나는이 가정에서 틀린가? 데이터베이스 디자인에 대한 나의 경험은 한계가 있습니다. 감사! – Kylee

+1

색인을 단축 할 수도 있습니다. 한 번에 이들 모두에 대한 선택을하지 않으면, 나는 그것이 당신의 문제라고 기대합니다. –

+0

그랬습니다. 색인 축소. 나는 대다수의 시간에 SELECT를 수행하지 않을 컬럼의 인덱스를 제거했다. 감사! – Kylee