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.
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:
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` )
)");
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.
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.
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).