Jump to content

Invision Community - How to...?

Sign in to follow this  
  • entries
    11
  • comments
    21
  • views
    454

Contributors to this blog

Jak poradzić sobie z kodowaniem znaków przy aktualizacji IP.Board 3 do IPS Community Suite 4?

W ostatnim czasie robiłem aktualizację dość dużego forum z wersji IP.Board 3 do wersji IPS Community Suite 4. Oczywiście nie obyło się bez problemów. Podstawowym problemem jak zawsze przy aktualizacji są polskie znaki.

Jeśli forum jest w latin2 to nie ma z tym problemów bo wiadomo, że trzeba je przekonwertować do utf-8. Ale co zrobić jeśli nasze forum w wersji 3 miało kodowanie utf, a aktualizacja stwierdza, że to nie jest utf i trzeba dokonać konwersji? W przypadku małego forum możemy oczywiście próbować wykonać taką konwersję, ale z doświadczenia wiem, że nie rzadko kończy się to tym, że zamiast polskich znaków diakrytycznych mamy krzaczki  w postaci np. znaków zapytania.

Metoda, którą przestawiam poniżej jest dość prosta, choć trochę się naszukałem i nakombinowałem aby to zrobić. Niestety aby wszystko działało prawidłowo musimy mieć dostęp do bazy danych z poziomu SSH.

SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci; ", "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; ") AS alter_sql FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'NAZWA_BAZY_DANYCH' INTO OUTFILE '/tmp/database.txt';

Zapytanie to tworzy listę zapytań typu ALTER TABLE..., które zmieniają kodowanie tabel z utf8_genral_ci na utf8_unicode_ci dla bazy danych podanej w NAZWA_BAZY_DANYCH.

Następnie musimy uruchomić z poziomu SSH plik, który powstanie w wyniku tego zapytania i koniec. Możemy dokonać aktualizacji forum bez żadnej dodatkowej konwersji.

 

  • Like 1


14 Comments


Recommended Comments

A jak przekonwertować Latin2 do UTF-8? Wystarczy wykonać zapytanie w MySQL i uruchomić? Baza nie jest duża bo waży około 250MB, ale nie wiem jakie polecenie byłoby najlepszym rozwiązaniem.

Share this comment


Link to comment
2 godziny temu, Gangst3r napisał:

A jak przekonwertować Latin2 do UTF-8? Wystarczy wykonać zapytanie w MySQL i uruchomić? Baza nie jest duża bo waży około 250MB, ale nie wiem jakie polecenie byłoby najlepszym rozwiązaniem.

Jeśli chcesz zrobić aktualizację forum, to najlepiej odpalić konwerter powinien sobie z tym poradzić. Ogólnie zmiana z latin na utf nie jest taka prosta bo jest zupełnie inny zapis polskich znaków diakrytycznych, więc trzeba je po prostu przekonwertować. Nie zrobisz tego zapytaniem w bazie.

  • Like 1

Share this comment


Link to comment
9 minut temu, VoytechG napisał:

A jak dokładnie odpalić ten nowopowstały plik?

Jaki plik?

  • Like 1

Share this comment


Link to comment

"Następnie musimy uruchomić z poziomu SSH plik, który powstanie w wyniku tego zapytania i koniec. Możemy dokonać aktualizacji forum bez żadnej dodatkowej konwersji."

Uruchomiłem ten plik poleceniem source database.txt, który zmienił mi kodowanie wszystkich tabel na ut8_unicode_ci jednakże polskie znaki dalej się nie wyświetlają

image.png.cfe9bb25088e00bb6a5c38d431f6f2f1.png

Edited by VoytechG

Share this comment


Link to comment

Trzeba wziąć pod uwagę to, że jeśli miałeś zepsute kodowanie w źródle to wynikiem nie będzie poprawne kodowanie. Dlatego najlepiej jest użyć konwertera IPS'u. Jeśli on źle przekonwertował to można wymusić na nim użycie kodowania latin2 i zrobić jeszcze raz.

  • Like 1

Share this comment


Link to comment

Dobrze, w takim razie jak wymusić kodowanie latin2? Rozumiem, że przez zrobienie jeszcze raz masz na myśli ponowny upgrade?

Share this comment


Link to comment
10 minut temu, VoytechG napisał:

Rozumiem, że przez zrobienie jeszcze raz masz na myśli ponowny upgrade?

Niestety tak

 

14 minut temu, VoytechG napisał:

Dobrze, w takim razie jak wymusić kodowanie latin2?

W katalogu admin/convertutf8/ stwórz plik constants.php:

 

 

  • Like 1

Share this comment


Link to comment
2 minuty temu, Spanner napisał:

Niestety tak

 

W katalogu admin/convertutf8/ stwórz plik constants.php:

 

 

Jak wymusić ponowny upgrade?

Share this comment


Link to comment
8 minut temu, Spanner napisał:

wgrywasz jeszcze raz baze

Myślę, że nie trzeba tego robić - wystarczy zrobić tak, czyli zaktualizować konkretne znaki, które nie działają, a nowe posty na ips 4 już działają

UPDATE `forum_core_error_logs` SET 
`log_error` = REPLACE(`log_error` , '¦', 'Ś'),
`log_error` = REPLACE(`log_error` , '¼', 'ź'),
`log_error` = REPLACE(`log_error` , '±', 'ą'),
`log_error` = REPLACE(`log_error` , '¿', 'ż'),
`log_error` = REPLACE(`log_error` , '¶', 'ś'),
`log_error` = REPLACE(`log_error` , 'æ', 'ć'),
`log_error` = REPLACE(`log_error` , '³', 'ł'),
`log_error` = REPLACE(`log_error` , 'ê', 'ę'),
`log_error` = REPLACE(`log_error` , '¯', 'Ż'),
`log_error` = REPLACE(`log_error` , '¡', 'Ą'),
`log_error` = REPLACE(`log_error` , 'Ê', 'Ę'),
`log_error` = REPLACE(`log_error` , '£', 'Ł'),
`log_error` = REPLACE(`log_error` , 'ñ', 'ń');

Share this comment


Link to comment

Możesz próbować. Jeśli masz nie dużo tabel to spoko, jak masz więcej to powodzenia 😉

  • Like 1

Share this comment


Link to comment
40 minut temu, Spanner napisał:

Możesz próbować. Jeśli masz nie dużo tabel to spoko, jak masz więcej to powodzenia 😉

Wiesz może jaka jest nazwa/nazwy tabel w bazie danych odpowiadająca za te nagłówki?

image.thumb.png.d10edd3299b3266132821d6ea486a967.png

Share this comment


Link to comment
5 minut temu, VoytechG napisał:

Wiesz może jaka jest nazwa/nazwy tabel w bazie danych odpowiadająca za te nagłówki?

image.thumb.png.d10edd3299b3266132821d6ea486a967.png

Odpisałem Ci w temacie

 

  • Like 1

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Dołącz do pierwszego newslettera Invision Community

×
×
  • Create New...

Important Information

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.