długość klucza

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
riker
Nowy
Nowy
Posty: 100
Rejestracja: sob wrz 25, 2004 2:03 pm
Lokalizacja: Wrocław

długość klucza

Post autor: riker »

Witam, nie wiem jak ustawic dlugosc klucza, a wyskakuje mi taki komunikat:
BLOB column 'tytul' used in key specification without a key length
A tak wyglada moja tabela:

Kod: Zaznacz cały

mysql_query("CREATE TABLE `news` (
`id` INT NOT NULL AUTO_INCREMENT ,
`data` TEXT NOT NULL ,
`tytul` TEXT NOT NULL ,
`tresc` LONGTEXT NOT NULL ,
`autor` TEXT NOT NULL ,
`fotka` TEXT NOT NULL ,
PRIMARY KEY ( `tytul` ) 
)");
Stig
Administrator
Posty: 938
Rejestracja: pn paź 04, 2004 10:52 am

Re: długość klucza

Post autor: Stig »

Obawiam się, że w kolumnie, która jest kluczem podstawowym tabeli, musi być przechowywany liczbowy typ danych (np. INT). Dodatkowo, tej kolumnie należy nadać atrybut AUTO_INCREMENT. Warto też nadać jej atrybut UNSIGNED.
iro
Moderator
Posty: 402
Rejestracja: pt gru 19, 2003 8:20 pm
Lokalizacja: Szczecin

Re: długość klucza

Post autor: iro »

Małe sprostowanie wypowiedzi Stiga. Kolumna, która ma być kluczem wcale nie musi mieć wartości liczbowej. Jednak musi mieć określoną długość, co oznacza, że nie nadają się do tego typy "text" - varchar z określoną długością na pewno jest przyjmowany. Druga rzecz - klucz wcale nie musi mieć atrybutu atuo_increment. Może ale nie musi. Niemniej jednak jeśli już jakiejś kolumnie nadasz taki atrybut powinna być ona kluczem.
Tak więc masz 2 wyjścia. Albo zostawisz kolumnę tytuł typu text a kluczem zrobisz kolumnę id, albo zmienisz typ kolumny tytuł na np. varchar(255) i kluczem zrobisz id i tytuł.
BTW: skoro już dajesz pole id to warto zrobić je kluczem, inaczej nie widzę większego sensu jego utrzymywania.
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: długość klucza

Post autor: viraptor »

Bloby (teksty) też można indeksować. np:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
w nawiasie trzeba podać ilość pierwszych liter do indeksu (max 1000 bajtów w myisam).
ODPOWIEDZ