Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Енкодинги в MySql - Как да си прекодирам базата?
  1. Енкодинги в MySql
  2. Как да си прекодирам базата?
Bibi
     
Автор  Bibi (09.12.2007 12:12)  съобщение до автора
Погледнат  4666 пъти  добави към любими
Оценка  добави коментар
Гласове  1  изпрати на приятел
Коментари  (1)  абонирай се за MySQL
    Страница 2 / 2

 



Как?

Как да си прекодирам базата? Защо ми излизат неразбираеми символи?

Много често срещам такива въпроси и доскоро мислех, че тая работа е много трудна и объркана.
Намерих един полезен текст тук:

http://www.hostbulgaria.com/tutorials/mysql-charset-encoding.aspx

С помощта на тези съвети доста хора се справиха с проблема.
Най-често препъващата стъпка е външното прекодиране на самия dump-файл.

Който няма средство за прекодиране, може да си напише PHP-скрипт, ползвайки тамошната функция iconv(), но цялата работа изглежда бавна и тромава.

Други хора предпочитат да ползват SQL-скриптове, с които да прекодират данните вътрешно, без изобщо да се минава през dump.
За тях специално искам да кажа, че каквато съм късметлийка, моментално успях "да настъпя мотиката" в този метод, което накратко разказах тук:

http://it-place.net/index.php?type=forum&rid=12&pid=6561&a=0#7835

Хубавата новина може да прочетете пак там, в следващия пост на Mutatos - ако вместо binary се използва BLOB, тази грешка не възниква.

С облекчение открих, че мога да прилагам друг метод, по-лек от горните два.

Минава се през dump-файл, но не се налага той да се дообработва и прекодира.

Единственото условие е да го създадете в енкодинга, в който е базата, дори когато този енкодинг е грешен!
Ако тя е в latin1, поискайте й дъмп latin1, дори и да знаете, че вътре държите 1251-данни.

Каква е целта? - Да я накарате да НЕ ПРЕКОДИРА данните ви.
(Но, ако phpMyAdmin се инати и винаги ви създава utf8-дъмп, няма да минете леко, защото вече всичко ще е разместено.)

Така че моята рецепта се състои от 3 стъпки:


  • Създаваме dump в енкодинга на базата (в примера това е latin1)
  • Дописваме в началото му:
    SET NAMES вярната_кодировка (т.е. тая, при която виждаме данните хубаво - в гориния пример 1251)
  • Вкарваме го в новата база (независимо в какъв енкодинг е тя, може да е в трети, примерно utf8, няма значение)
    Толкоз!


P.S.

  • Откриването на правилния енкодинг, в който са четими данните от dump-файла (ако не го знаем) може да се направи като го отворим с браузер и сменяме, докато се видят добре.

  • Отварянето на голям dump-файл (нужно, за да допишем в него енкодинга на връзката) е кошмарно в някои редактори!
Ако опитате с PSPad, ще брадясате и оплешивеете (защото ще си скубете косите).
Докато примерно с UltraEdit нещата са добре.



 << Предишна страница  


Ключови думи: бази данни MySQL encoding база данни таблица енкодинг колация прекодиране на база данни


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Който няма средство за прекодиране, може да си напише php-скрипт, ползвайки тамошната функция iconv(), но цялата работа изглежда бавна и тромава.
Да дипълня че тази функция се подържа от версия 4.0.5 на горе.

Урока е полезен и много добре написан според мен.
Поздрави

  iwanov на 09.12.2007 15:33

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008