2010-03-04 1 views
0

내가 할 것 어떻게 SO에 또 다른 질문을 열하지 않도록, phpMyAdmin을?MySQL : 테이블의 여러 행에 대해 고유 한 데이터를 만드는 방법은 무엇입니까?

CREATE TABLE `myData` (
    id serial primary key, 
    title varchar(255) not null, 
    description varchar(255) not null, 
    UNIQUE (title, description) 
); 

에서 그리고 그런데 (만 UNIQUE (제목을 수행하는 방법에 관심이 , 설명)를) 다음, 긴 문자열에 사용할 수있는 다른 유형을 알고 싶습니다. 225 자까지는 우리의 목적에 비해 너무 작습니다. varchar는 MySQL 5.0.3부터 최대 65,535 자까지 허용 할 수 있습니다. 하지만 그 필드를 MEDIUMTEXT로 지정할 수 있습니까? (제 의뢰인은 그러한 필드를 호환성을 위해 그대로 사용하기를 원합니다). 그렇게하면 " BLOB/TEXT 열 ... 키 길이가없는 키 사양"에 사용되기 때문에 오류가 발생합니다. 그러면 어떻게해야합니까? 이 두 필드가 고유해야합니다. 설명이 다른 경우에도 유사한 제목을 저장할 수 있지만 들어오는 데이터의 제목과 설명과 일치하는 제목과 설명이 있으면이 들어오는 데이터를 저장하지 않기를 바란다. .

+0

이 대소 문자를 변경하고 간격을 다르게 할 수 있습니까? 즉 동일한 제목이지만 하나는 다른 대소 문자를가집니다. 또는 동일한 설명이지만 하나는 2 개의 공백이 있습니다. – zapping

+0

대소 문자가 바뀌고 다른 간격이 지금은 계산에 포함되지 않는다고 생각합니다. 일치하면 대소 문자와 공백이 모두 동일합니다. – AleGore

+0

두 번째 질문은 다음과 같습니다. http://dev.mysql.com/doc/refman/5.0/en/blob.html – Svish

답변

1

최대 기본 키 길이 MyISAM위한 1000 바이트 (키의 각 열에 767 바이트를 넘지 않아야 추가 요건) InnoDB위한 3072 바이트이다.

테이블이 InnoDB 또는 MyISAM이고 1 바이트 인코딩 인 경우 제약 조건을 만들 수 있습니다.

접두어가 붙지 않는 색인을 만들 수는 있지만 색인은 접두사 내에서만 고유성을 유지합니다.

그러나 제목과 설명을 해시하고 고유 한 열에 해시를 저장하는 것이 훨씬 더 좋습니다. 다음 (왼쪽 아래) 2 행에 걸쳐 인덱스를 추가,

이동을 테이블에와 "구조"를 선택 : 다음을 수행)

0

(나는이 질문했다 희망)에 phpMyAdmin을 사용하여 UNIQUE를 만들려면 두 개의 필드와 "indextyp : unique"을 선택하고 완료하십시오.

편집 : 추가 된 스크린 샷은 독일어이지만 동일한 것으로 보입니다. 나는 정말로 그 트릭을 수행하기를 바랍니다. 그렇지 않다면 나는 당신의 질문과 당신이 만든 모든 의견을 이해하지 못했습니다.

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step1.png "독특한"인덱스의 단지 특별한 유형이기 때문에이 "인덱스"아래에 제출 한

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step2.png

.

+0

따라하기 힘듭니다 ... 우선, 왜 색인이 아닌 고유 한 이유가 무엇입니까? 어떻게 두 개의 필드를 선택하고 "indextyp : unique"? – AleGore

+0

내 편집을 참조하십시오 – edorian

0
CREATE TABLE `myData` (
`id` INT(12) NOT NULL , 
`title` TEXT NOT NULL , 
`description` TEXT NOT NULL , 
PRIMARY KEY (`id`) , 
UNIQUE (
`title` (255) , 
`description` (255) 
) 
); 

MySQL은 제목과 설명의 전체 정보를 저장하지만 해당 필드의 첫 번째 문자 만 255 자까지만 인덱싱합니다. 즉, 똑같은 캐릭터 255 자의 제목 2 개를 입력하면 다른 문자가 나옵니다. 그러면 두배의 오차가 생깁니다.

+0

그 질문에 답하는 데 도움이된다고 생각합니까? phpmyadmin에서 어떻게하는지 알고 싶습니다. 또한이 문제 (긴 문자열)를 선택할 때 어떤 유형인지 궁금합니다. – AleGore

0

테이블을 이미 만들었 으면 PhpMyAdmin의 구조로 이동하여 왼쪽에있는 확인란이있는 두 개의 열 (제목, 설명)을 선택하십시오. 테이블 설명 아래의 컨트롤 열에서 U 아이콘을 클릭하십시오. 그러면 두 개의 선택된 필드에 고유 색인이 추가됩니다.

색인 길이 및 해시 대체 방법에 대한 Quassnoi 님의 의견에 대한 의견이 있습니다.또한 UTF-8 텍스트 컬럼은 인덱스에서 문자 당 3 바이트가 필요하므로 UTF-8 텍스트 컬럼 인덱싱은 상당히 비쌉니다.