Днес проучвах възможностите за сваляне на MySQL от 4.1 до 4.0. Подробностите за причините са тук и тук. Сега ще добавя още подробности по трудностите с MySQL 4.1.
-
От команден ред даже проста заявка като тази може да даде грешка, стига в нея да има литерали:
mysql> SELECT * FROM wp_users WHERE user_login='ogi'; ERROR 1267 (HY000): Illegal mix of collations (cp1251_bulgarian_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='
Няма значение, че се използват латински букви, и е все тая какво е кодирането. Заобикалянето е следното:
mysql> SELECT * FROM wp_users WHERE user_login=_cp1251'ogi';
-
Бях задал подразбиращото се кодиране да е CP1251. Появи се обаче неочакван проблем с PHP. Явно и по-старите версии разбират малко от кодиране и затова използват файловете на MySQL с описания на кодиранията в /usr/share/mysql/charsets. Обаче форматът на тези файлове е променен в 4.1, а PHP, както вече се разбра, използва старата клиентска библиотека и затова има сериозни трудности. Задаването на UTF-8 като подразбиращо се кодиране също не оправя нещата. За пълнота, ето въпросната грешка (#14 е CP1251, #33 е UTF-8):
File 'NONEXISTENT/charsets/?.conf' not found (Errcode: 2) Character set '#14' is not a compiled character set and is not specified in the 'NONEXISTENT/charsets/Index' file
- Не знам защо, но вече имаше няколко проблема с таблици на потребители и нещата не са още напълно оправени.
Започнах експерименти със слизане до 4.0, но още не става. Първият проблем е, че използваната версия на Berkeley DB е по-висока и не може направо да се слезе. Опитах се чрез инструментите на BDB да сляза, но даже и един дъмп не можах да направя. Хмм -- може би трябва да съм по-упорит?
Следващата стъпка беше опит чрез mysqldump. Обаче се оказа, че една таблица е развалена и CHECK TABLE EXTENDED не може да я оправи. Ще трябва да чакам отговор от потребителя на тази таблица.
И тъй, надявам се следващото споменаване на MySQL 4.1 да е с пълно решение на проблема със слизането към 4.0. Използването на по-нова клиентска библиотека в PHP не ми харесва -- струва ми се, че това няма магически да реши проблемите.