Strona 1 z 1
długość klucza
: wt lip 26, 2005 8:55 pm
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` )
)");
Re: długość klucza
: wt lip 26, 2005 9:32 pm
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.
Re: długość klucza
: śr lip 27, 2005 9:15 am
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.
Re: długość klucza
: czw lip 28, 2005 7:25 pm
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).