standardowy import:
Cytat
Błąd
Zapytanie SQL:
CREATE TABLE `positions` (
`ID` int( 11 ) NOT NULL AUTO_INCREMENT ,
`type` varchar( 255 ) default NULL ,
`short_description` varchar( 255 ) default NULL ,
`long_description` longtext,
`players_positionID` varchar( 255 ) default NULL ,
`statistic_categories_group` varchar( 255 ) default NULL ,
`statistic_categories_group_long` varchar( 255 ) default NULL ,
`include_in_roster_requirements` tinyint( 3 ) default '1',
PRIMARY KEY ( `ID` ) ,
KEY `positionID_group_long` ( `players_positionID` , `statistic_categories_group` , `statistic_categories_group_long` )
) TYPE = MYISAM AUTO_INCREMENT =16;
MySQL zwrócił komunikat: Dokumentacja
#1071 - Specified key was too long; max key length is 1000 bytes
PMA 3.3.7deb5
Zobacz wątek tutaj:
http://forums.phplist.com/viewtopic.php?=&p=27451 wyjaśniono tam, dlaczego tak się dzieje. Chodzi o to, że w kodowaniu utf-8 każdy znak jest liczony jako 3 bajty, więc indeks zbudowany na podstawie pól długości 255 i 255 oraz 255 razy 3 daje w sumie 2295 bajtów i przekracza dozwoloną wartość 1000. Rozwiązanie to zmiana kodowania bazy i ustawienia kodowania importu na np. ASCII lub latin, u mnie import zakończył się sukcesem w trybie ascii. Jest to ewidentny błąd projektanta bazy.
// edit
alternatywnym rozwiązaniem tylko w przypadku konieczności zachowania kodowania utf-8 jest zmiana struktury klucza i założenie go na tylko jedno z tych pól (255 x 3 = 765 < 1000 więc OK) ale uwaga, może to mieć negatywny wpływ na zachowanie bazy i należałoby tutaj zachować szczególną ostrożność.