ďťż

[MySQL] Konwersja z ISO do UTF po stronie serwera

       

Podstrony


telcocafe

Postanowiłem przejść na UTF. Nie wiem, czy to do końca dobra decyzja (polskie znaki zajmują 2 bajty). Jak skonwertować treść w bazie danych z kodowania ISO-8859-2 na UTF-8?

Dozwolone metody:
- funkcja w serwerze MySQL
- ryzykowny import i eksport danych w PhpMyAdmin
- czy pozostaje jeszcze bardziej rezykowny sposób: iconv (gdy dostępny) lub własna funkcja?




Postanowiłem przejść na UTF. Nie wiem, czy to do końca dobra decyzja (polskie znaki zajmują 2 bajty).
Och jej, aż tyle miejsca! ;) Ja używam od bardzo dawna.


Jak skonwertować treść w bazie danych z kodowania ISO-8859-2 na UTF-8?
Możesz zrobić zrzut, przekodować plik i wrzucić do bazy o kodowaniu UTF-8 ;) Jak masz wersję rozwojową skryptu to jakiś ton danych nie masz... Wystarczy zmienić kodowanie tabel oraz kodowanie w HTMLu na UTF-8 i gotowe. Coś do przekodowania na szybko przy edycji kodu to iconvem można.

I pamiętaj że stringi UTF-8 to nie stringi nie-UTF-8 i trzeba gdzieniegdzie stosować nieco inne funkcje :) Poza tym Python+Django rulez :P


I pamiętaj że stringi UTF-8 to nie stringi nie-UTF-8 i trzeba gdzieniegdzie stosować nieco inne funkcje Czyli czekają mnie jeszcze dodatkowe utrudnienia? Które funkcje mogą sprawiać problemy i dlaczego? Podobno są trudności z: strlen(), substr()... Z mb_string nie będę korzystał - rozszerzenie nie jest domyślnie uruchomione.
Użytkownik Ferrari edytował ten post 16 czerwiec 2008, 13:21
Zawsze i wszędzie używam UTF-8 i nie spotkałem się z trudnościami z tak podstawowymi funkcjami jak strlen() czy substr().




Zawsze i wszędzie używam UTF-8 i nie spotkałem się z trudnościami z tak podstawowymi funkcjami jak strlen() czy substr().
To chyba nie ciąłeś polskich znaków. Wytnij jeden znak z ą, a zobaczysz na czym ten problem polega.
Co do mb_*, to na każdym serwerze, na jakim pracowałem, były włączone owe funkcje.

Rzeczywiście strlen() liczy ilość bajtów zamiast ilości znaków. W 1. kolejności posypie się kompilator szablonów. UTF-8 jest znany od dawna, zaś PHP 5 został wydany w 2004 roku. Dlaczego nie pojawiła się pełna obsługa UTF-8?

Chyba na razie wstrzymam się ze zmianami. Ostatecznością jest przejście na mb_string(), lecz zmiany mogą trochę potrwać (nie wszystko da się wykryć i zamienić za pomocą V-Grep). W PHP6 będzie już obsługiwał UTF-8 - mb_* staną się zbędne.

Zakres znaków ISO-8859-2 jest dość wąski (brakuje np. dolnego cudzysłowu) - to przemawia za przejściem na UTF-8. Może lepiej zaczekać do wydania PHP 6? ;)
Użytkownik Ferrari edytował ten post 16 czerwiec 2008, 19:32
I będziesz miał ten sam problem - wciąż za mało serwerów z obsługą PHP 6.
A kompilator szablonów nie powinien się posypać. Nie ma czemu.
I do czego Ci V-Grep? Do konwersji izolatka => utf-8 są programy, które pozwalają na grupową konwersję plików...
// Edytowano
@niżej:
Na yoyo mb_* działa, bo mój CMS używa tych funkcji.
Użytkownik andrzej_aa edytował ten post 16 czerwiec 2008, 20:55
PHP 6 z zakorzenieniem się może mieć kłopoty. Starsze skrypty na pewno nie ruszą na tej wersji.

Do czego V-Grep? Choćby do masowej zamiany str* na mb_*. Nie wiem, co robić. Przeprowadzę jeszcze trochę testów dot. mb_string() - muszę zbadać ich wydajność i sprawdzić, czy rozszerzenie jest włączane przez większość adminów. Macie konta na jakichkolwiek darmowych hostingach? Zgłoście się na PW - po meczu podrzucę skrypt do odpalenia. :)

Myślę, że większość serwerów będzie obsługiwać zarówno php6 jak i php5, przełączane w panelu lub przez .htaccess (spotkałem się z tym przy okazji php4/php5)


Nie wiem, co robić. Przeprowadzę jeszcze trochę testów dot. mb_string() - muszę zbadać ich wydajność
A kiedy wreszcie nauczysz się tworzyć aplikacje internetowe? Ci mogę powiedzieć że ASCII będzie "najszybsze".

Jeżeli chcesz być programistą a nie script kiddie, który wyleci z każdej poważnej roboty musisz nauczyć się tworzyć aplikacje www, a nie dywagować co jest na serwerach, czego nie ma, co jest szybsze, co wolniejsze - w przypadku tworzenia funkcjonalnej strony www takie dywagacje nie mają miejsca bo nie ma na to czasu, ani nie jest to do niczego potrzebne. Zaleta UTF-8 jest taka że jest miej problemów gdy interfejs może być tłumaczony na inne języki, oraz większą zgodność z różnymi dodatkami, które z natury obsługują UTFa ze względu na jego szerokie spektrum znaków. Przy generowaniu PDFów, systemach wyszukiwarek (sphinx dla MySQL, czy też np. xapian, Lucene) latin2 może być nawet nieobsługiwany, natomiast UTF-8 będzie podstawą.

PHP 6 w porównaniu do PHP 5 nie będzie rewolucją, a jedynie ewolucją. Oczywiście tam gdzie teraz PHP5 nie ma lub jest byle jak PHP6 nie wejdzie bo badziewie PHP3/4-safe_mode klientów przestanie działać ;) Nie staraj się tworzyć funkcjonalności patrząc czy coś jest na darmowych serwerach, czy nie - tak to ograniczysz się do poziomu osCommerce :P taka wada PHP.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.