Поправяне на енкодинга на MySQL база данни при ъпгрейд от 3.x/4.0 към 4.1/5
на 13 март 2008 от Гонзо в Разни,
Пиша това, за да не се налага следващия път пак да откривам топлата вода, че пишман станах!
Сценария е следния - имаме MySQL база данни със кодиране на знаците в cp1251 и версия на сървъра по-малка от 4.1. Слагаме новата версия и на пръв поглед може и да си работят нещата, но търсенето не е както трябва, сортирането по varchar полета с кирилица не е правилно… Това е така, защото при ъпгрейта MySQL прекодира вътрешно знаците към UTF8, използвме подразбиращо се кодиране на връзката latin1 и получавме символи, което интерпретирани като cp1251 си се показват като кирилица. Обаче при търсене и сортиране нещата не работят както очакваме. Проблема се оправя така:
Първо дъмпиме базата данни:
shell> mysqldump -опции опции db > db.sql
След това използваме iconv за да направим файла cp1251:
shell> iconf -f utf8 -t latin1 db.sql >db_cp1251.sql
Ще кажете “ама защо към latin1?” Защото символите във базата данни са прекодирани от latin1 към UTF8.
После във файла променяме дефиницийте на таблиците да са с кодиране cp1251, като го отваряме в текстов редактор и заменяменавсякъде DEFAULT CHARSET latin1 със DEFAULT CHARSET cp1251. След това наливаме обратно дъмпа и готово:
shell> mysql -p db < db_cp1251.sql



Няма коментари
Вашият коментар