• Rejestracja
vBHELP.pl - polskie wsparcie vBulletin
Strona 1 z 2 12 OstatniOstatni
  1. #1
    Koyiol jest nieaktywny Użytkownik
    Dołączył
    Jun 2009
    Posty
    28

    Domyślnie Zmiana kodowania bazy danych

    Cześć!
    Na moim forum, mam ustawione kodowanie języka: ISO-8859-1, w bazie danych jest: latin2_general_ci. Można po prostu przejść na UTF? Jak to zrobić?



  2. #2
    Awatar Krisuuu
    Krisuuu jest nieaktywny Stały bywalec
    Dołączył
    Apr 2009
    Posty
    283

    Domyślnie

    Możesz przekonwertować bazę takimi programami jak: ked bądź gżegżółka


  3. #3
    Marek jest nieaktywny Banned
    Dołączył
    May 2008
    Przegląda
    Where my hat is
    Posty
    0
    Przydatne posty
    26

    Domyślnie

    Cytat Zamieszczone przez Krisuuu Zobacz posta
    Możesz przekonwertować bazę takimi programami jak: ked bądź gżegżółka
    Po co? Kodowanie tabel jest teraz latin2_general_ci, więc nie ma żadnej potrzeby by to zmieniać.

    Cytat Zamieszczone przez Koyiol Zobacz posta
    Na moim forum, mam ustawione kodowanie języka: ISO-8859-1, w bazie danych jest: latin2_general_ci. Można po prostu przejść na UTF? Jak to zrobić?
    Wystarczy w ACP w ustawieniach języka zmienić kodowanie z ISO-8859-1 na ISO-8859-2. Proponuję dokonać takiej zmiany dla języka polskiego i angielskiego.


  4. #4
    swist jest nieaktywny Użytkownik
    Dołączył
    Apr 2010
    Posty
    85

    Domyślnie

    Pomieszane kodowanie, nienajlepiej to wróży na przyszłość. Najwyższy czas przejść na UTF-8.

    Sprawdź kodowanie bazy po obu stronach przez zapytanie SQL

    Kod:
    SHOW VARIABLES LIKE 'character_set_database';
    
    SHOW VARIABLES LIKE 'character_set_client';
    Ewentualnie sprawdź możliwe zestawy znaków i metody porównań

    Kod:
    SHOW CHARACTER SET;
    
    SHOW COLLATION LIKE 'utf8%';
    Ustaw kodowanie dla bazy od strony serwera, bazy, tabeli, połączenia

    Serwer (/etc/my.cnf)

    Kod:
    [mysqld]
    
    default-character-set=utf8 
    default-collation=utf8_general_ci
    Baza danych

    Kod:
    ALTER DATABASE ... DEFAULT CHARACTER SET utf8
    Tabela

    Kod:
    ALTER TABLE ... DEFAULT CHARACTER SET utf8
    Połączenie

    Kod:
    SET NAMES 'utf8';
    Teraz najlepiej posłużyć się skryptem do konwersji bazy, oczywiście wcześniej backup. Ten powinien być ok:

    Kod:
    <?php
     
    // this script will output the queries need to change all fields/tables to a different collation
    // it is HIGHLY suggested you take a MySQL dump prior to running any of the generated
    // this code is provided as is and without any warranty
     
    die("Make a backup of your MySQL database then remove this line");
     
    set_time_limit(0);
     
    // collation you want to change:
    $convert_from = 'latin1_swedish_ci';
     
    // collation you want to change it to:
    $convert_to   = 'utf8_general_ci';
     
    // character set of new collation:
    $character_set= 'utf8';
     
    $show_alter_table = true;
    $show_alter_field = true;
     
    // DB login information
    $username = 'user';
    $password = 'pass';
    $database = 'table';
    $host     = 'localhost';
     
    mysql_connect($host, $username, $password);
    mysql_select_db($database);
     
    $rs_tables = mysql_query(" SHOW TABLES ") or die(mysql_error());
     
    print '<pre>';
    while ($row_tables = mysql_fetch_row($rs_tables)) {
        $table = mysql_real_escape_string($row_tables[0]);
        
        // Alter table collation
        // ALTER TABLE `account` DEFAULT CHARACTER SET utf8
        if ($show_alter_table) {
            echo("ALTER TABLE `$table` DEFAULT CHARACTER SET $character_set;\r\n");
        }
     
        $rs = mysql_query(" SHOW FULL FIELDS FROM `$table` ") or die(mysql_error());
        while ($row=mysql_fetch_assoc($rs)) {
            
            if ($row['Collation']!=$convert_from)
                continue;
     
            // Is the field allowed to be null?
            if ($row['Null']=='YES') {
                $nullable = ' NULL ';
            } else {
                $nullable = ' NOT NULL';
            }
     
            // Does the field default to null, a string, or nothing?
            if ($row['Default']=='NULL') {
                $default = " DEFAULT NULL";
            } else if ($row['Default']!='') {
                $default = " DEFAULT '".mysql_real_escape_string($row['Default'])."'";
            } else {
                $default = '';
            }
     
            // Alter field collation:
            // ALTER TABLE `account` CHANGE `email` `email` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
            if ($show_alter_field) {
                $field = mysql_real_escape_string($row['Field']);
                echo "ALTER TABLE `$table` CHANGE `$field` `$field` $row[Type] CHARACTER SET $character_set COLLATE $convert_to $nullable $default; \r\n";
            }
        }
    }
     
    ?>
    Zrobisz w takiej kolejności, w skrypcie daj UTF-8 i powinno hulać, o ile coś nie pokręciłem.


  5. #5
    Marek jest nieaktywny Banned
    Dołączył
    May 2008
    Przegląda
    Where my hat is
    Posty
    0
    Przydatne posty
    26

    Domyślnie

    Cytat Zamieszczone przez swist Zobacz posta
    Pomieszane kodowanie, nienajlepiej to wróży na przyszłość. Najwyższy czas przejść na UTF-8.
    Ja od dawna używam kodowania tabel w latin2_general_ci i wszystko działa bez zarzutu. Nie widzę więc powodu by przechodzić z latin2_general_ci na utf-8


  6. #6
    swist jest nieaktywny Użytkownik
    Dołączył
    Apr 2010
    Posty
    85

    Domyślnie

    Tak nie wątpię, ale różnie w życiu bywa, czasami trzeba zmienić serwer, skrypt, cokolwiek, wtedy najlepiej mieć wszystko w czystym UTF-8 aby uniknąć komplikacji. Problemy dotyczące kodowania chyba najczęściej pojawiają się na takich forach.


  7. #7
    xeite jest nieaktywny Początkujący
    Dołączył
    Sep 2009
    Posty
    15

    Domyślnie



  8. #8
    swist jest nieaktywny Użytkownik
    Dołączył
    Apr 2010
    Posty
    85

    Domyślnie

    Teraz dopiero doczytałem, że w bazie niby jest latin2 Jeśli tak to chyba pomieszane z latin1?

    Przed konwersją w bazie miałeś krzaki? Daj screena stryktury bazy, struktury tabel, polskich znaków przed konwersją, wykonaj polecenie sql:

    Kod:
    SHOW VARIABLES LIKE "character_set%";
    i wklej rezultat.

    Kodowanie tabel możesz zmienić komendą:

    ALTER TABLE `nazwa_tabeli` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci,
    DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    (nie wiem jak to się ma do wersji MySQL, którą posiadasz)


  9. #9
    prac jest nieaktywny Użytkownik
    Dołączył
    Jul 2010
    Posty
    48
    Przydatne posty
    3

    Domyślnie

    Temat stary ale problem aktualny.
    U mnie też mam pomieszane kodowanie, większość to latin2_general_ci ale czasami widzę latin1_swedish_ci.
    Testowałem na testowej bazie ręczną zmianę kodowania z latin1_swedish_ci na latin2_general_ci.
    Mam więc pytanie czy takie ręczne zmiany są poprawną czynnością i nie odbije się to na pojawianiu się w przyszłości błędów i czy taka zmiana zostanie na stałe.


  10. #10
    Awatar WoG
    WoG
    WoG jest nieaktywny vB Specialist
    Dołączył
    Feb 2008
    Posty
    2 812
    Przydatne posty
    298
    Wpisów
    1

    Domyślnie

    Jeżeli zostanie przeprowadzona prawidłowo - w przyszłości błędów nie będzie, a zamiana pozostanie na stałe
    Z poważaniem,
    WoG

    Ty też możesz pomóc spolszczać vBulletin 5: GitHub.com
    "Rozczarowanie spowodowane niską jakością pamięta się długo po przeminięciu radości spowodowanej niską ceną"


Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. Zmiana hasła bazy danych po profesjonalnej instalacji
    By Mus in forum Pytania i problemy
    Odpowiedzi: 2
    Ostatni post / autor: 05.04.2013, 17:37
  2. Zmiana kodowania do utf8 [3.8.6]
    By Change in forum Pytania i problemy
    Odpowiedzi: 0
    Ostatni post / autor: 22.12.2010, 20:38
  3. Ogromna ilość danych przesłanych z/do bazy danych
    By Diablotic in forum Pytania i problemy
    Odpowiedzi: 0
    Ostatni post / autor: 12.04.2010, 21:31
  4. Odpowiedzi: 0
    Ostatni post / autor: 10.03.2010, 13:38
  5. Zmiana hasła bazy danych
    By Młody in forum Pytania i problemy
    Odpowiedzi: 2
    Ostatni post / autor: 31.03.2008, 18:51
Chmurka.pl

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67