Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kodowanie - ślepa uliczka?
Change
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (0%)
-----


Witam, od 2 lat prowadzę pewne forum (które od startu było równocześnie startem mojej styczności z html,php,mysql i siecią), parę miesięcy temu podczas przenosin na inny serwer. Wtedy też dopiero - gdy po przeniesieniu bazy miałem krzaki zamiast polskich znaków, zleciłem to "specjaliście". Forum na vBulletin. Okazało się że kodowanie mojej bazy to latin1_swedish_ci , a wg niego konwersja tego na utf8 jest niemożliwa (siedział nad tym pare dni), bez utraty polskich znaków we wszystkich postach itp. Czy da się coś zrobić, czy już zawsze będę miał problem siedząc w tym kodowaniu?
Pozdrawiam i liczę na pozytywną odpowiedź (IMG:style_emoticons/default/worriedsmiley.gif)

Ten post edytował Change 16.04.2011, 13:08:11
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




A nie ma możliwości zmiany kodowania bazy na utf8 i ponownego importu danych?
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Robisz kopię zapasową bazy danych.
2. Unicode pozwala na zapisanie wszystkich znaków występujących w ISO-8859-1, tak więc nie ma problemu by zmienić kodowanie bez utraty ogonków.
3. Teraz wystarczy już tylko:
  1. UPDATE tbl_name SET col_name = CONVERT(col_name USING utf8);

4. latin1_swedish_ci to nie kodowanie tylko metoda porównywania znaków. Kodowaniem jest latin1.
Go to the top of the page
+Quote Post
Noidea
post
Post #4





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

Ostrzeżenie: (0%)
-----


Po pierwsze musisz sprawdzić w jakim kodowani tak na prawdę masz dane w starej bazie danych. Odpal zapytania:
  1. SET NAMES latin1; -- wypróbuj również latin2, utf8 i cp1250
  2.  
  3. SELECT kolumna_z_polskimi_znakami FROM tabela WHERE id = ID_WIERSZA_KTÓRY_ZAWIERA_DUŻO_POLSKICH_ZNAKÓW

(Najlepiej zrobić to przez narzędzie typu MySQL Workbench, ale jeśli będziesz robił to przez skrypt PHP i przeglądarkę, to pamiętaj, żeby poinformować ją o kodowaniu, np:
header( "Content-Type: text/plain; charset=iso-8859-1" ); )

Jak już się dowiesz jak tak na prawdę zakodowane są twoje polskie znaki, to robisz zrzut bazy do pliku .sql, wstawiasz w pierwszej linijce:
  1. SET NAMES kodowanie; -- wstaw tu odpowiednie kodowanie z pierwszego kroku
i wczytujesz na nowym serwerze. Oczywiście nowe tabele tworzysz już w kodowaniu utf8.

Przykładowo jeśli obecnie twoje polskie znaki zakodowane są jako latin2, to zrzut bazy powinien wyglądać tak:
  1. SET NAMES latin2;
  2.  
  3. CREATE TABLE jakas_tabela (
  4. jakas_kolumna varchar(255) NULL
  5. ...
  6. ) CHARSET=utf8
  7.  
  8. ...
  9.  
  10. INSERT INTO jakas_tabela (jakas_kolumna, ...) VALUES ('tekst z polskimi znakami zakodowanymi jako latin2', ...)
  11.  
  12. ...
Go to the top of the page
+Quote Post
Change
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (0%)
-----


No, spróbuję skorzystać z waszych rad, zobaczymy co będzie, bo po samym przeczytaniu to nadal czarna magia (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 02:36