![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam do was pytanie odniśnie tego w jaki sposób całkowicie i bezpiecznie zmienić kodowanie bazy danych wraz z polskimi znakami z kodowania iso-8859-2 (latin2) na utf-8 gdzie baza jest na prawdę bardzo duża (liczona w GB) Do tej pory robiłem to w ten sposób: 1. Pobierałem całość bazy lub pojedyncze tabele (w zależności od pojemności bazy) (kodowanie iso-8859-2) 2. Za pomocą programu notepad++: - edytowałem te pliki, - zmieniałem kodowanie na iso (by były wszystkie polskie znaki) - kopiowałem całość, - zmieniałem kodowanie pliku na utf-8 - całość podmieniałem za to co miałem skopiowane (czasem robiły się krzaki po konwertacji) - Zmieniałem w pliku linijki gdzie było napisane kodowanie latin2 na utf8 3. Po zapisaniu zmian wgrywam z powrotem tabele lub całość bazy już z kodowaniem utf-8 Ogólnie to przy małych bazach danych ten sposób problemów nie ma bo jakoś zawsze udawało mi się przekonwertować z polskimi znakami lecz jak przychodzi mi konwertować duże bazy danych gdzie liczy się nie kb a MB/GB to dosyć często pojawiają się "krzaczki" lub polskie znaki zmieniają się na znaki zapytania. Ogólnie to nie jestem zbyt zaawansowany z bazami danych i możliwe że mój sposób jest błędy dlatego pytam się was czy macie lepsze metody na to. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj tak w terminalu linuksa, ale zbackupuj wszytko najpierw, bo nie mam pewności:
Założenia: hasło roota mypass Tworzony jest user mydatabase. hasło usera mydatabase mypass2 nazwa bazy danych mydatabase Sprawdź, czy działa iconv wcześniej. edit 1. linia kodu Ten post edytował trzczy 30.01.2018, 06:03:27 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) ![]() ![]() |
Hmmm jak w terminalu linuksa to bym musiał mieć dostęp do całego serwera... a ja sobie tego nie będę robił lecz komuś gdzie dostęp będę miał tylko do phpmyadmin i ftp
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
W sumie wszystko można zrobić poza linuksem, oprócz tego:
Znaczy się, to też można, ale trzeba poszukać odpowiednika iconv dla windows. mysqldump niby wersja na windows jest... Wyślij mi dump tej bazy danych na priv. Ten post edytował trzczy 30.01.2018, 06:02:00 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jedna mała acz bardzo, bardzo istotna uwaga. W MySQL kodowanie UTF8 to utf8mb4, nie utf8 - o tym ostatnim należałoby właściwie zapomnieć.
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) ![]() ![]() |
W MySQL kodowanie UTF8 to utf8mb4, nie utf8 - o tym ostatnim należałoby właściwie zapomnieć. ![]() Ale to i tak niezbyt dużo mi pomoże skoro wychodzą krzaki. Ta strona działała i nadal działa na bardzo starym silniku (oprogramowaniu) oraz php 5.3 Teraz właściciel tego serwisu zgłosił się do mnie bym zrobił mu aktualizację strony i zmienić kodowanie iso na utf8 i nie chcę tak dużej strony po prostu rozwalić. Ograniczony mam dostęp do zasobów bo tylko FTP i phpmyadmin i nawet jakbym miał wykonać te komendy wyżej podane to musiałbym się jakoś połączyć z linuksem a tego nie potrafię |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jedna z dróg jaka Ci chyba pozostaje to zgrac cały dump bazy, pozmieniać kodowanie w całym pliku i wgrać.
Dla ułatwienia warto wgrywać plik mniejszymi partiami żeby nie zabić bazy. Ważna uwaga to żeby w instrukcjach SQL zawrzeć "DROP IF EXEIST;" i "CREATE DATABASE" dzięki tem nie będzie większych problemów. Inna to zrobienie dumpu, przekonwertowanie i wgranie jako nowa baza a potem tylko zmiana nazwy w pliku config aplikacji. Jeszcze inna to np: https://github.com/nicjansma/mysql-convert-latin1-to-utf8 Jest miliard sposobów ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli idzie o zapamiętywanie emoji lub w ogóle różnych ikonek w tekstach w bazie danych, to trzeba zrobić tak, jak napisał Crozin. W zaistniałej sytuacji poprawiłem kod:
Założenia: hasło roota rootpass nazwa bazy danych mydatabase Tworzony jest user mydatabase z prawami do bazy danych mydatabase. hasło usera mydatabase mypass Uwaga: Nie należy wklejać kodu mechanicznie, tylko trzeba dostosować do własnej konfiguracji. Zaleca się wcześniejsze wykonanie backupu. Ten post edytował trzczy 31.01.2018, 01:06:47 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) ![]() ![]() |
Cóż zapiszę sobie wasze propozycje bo przydadzą się w przyszłości
![]() Ostatecznie skorzystałem z mojego sposoby gdyż po konwertacji "krzaczków" dużo nie było jedynie gdzieś tam unicode ale to masowo udało się pozmieniać tak że jak pojawią się gdzieś tam literówki to będzie ich tak mało że nikt nie zauważy a nawet jeśli to właściciel portalu sobie poradzi. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
Jakiś czas temu robiłem taką operację i nie trzeba nic pobierać oraz konwertować...
Wystarczyło zmienić kodowanie bazy, tabel i kolumn. Mysql sam przekonwertował znaki. W moim przypadku była to zmiana na utf8_polish_ci i wyglądało to tak
I tak z każdą tabela/kolumną. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.05.2025 - 11:08 |