Проблемы с кодировкой в MySQL 5

Тема в разделе "Shop-script", создана пользователем Dr. Morg, 11 мар 2008.

Статус темы:
Закрыта.
  1. Dr. Morg

    Dr. Morg Постоялец

    Регистр.:
    26 дек 2006
    Сообщения:
    55
    Симпатии:
    26
    Столкнулся с проблемой при переходе с MySQL 4.1 на MySQL 5 в БД весь русский текст отображается как надо, а в магазине всё вопросительными знаками.

    Решение нашёл следующее:

    В файлы:
    admin.php
    cart.php
    category.php
    get_file.php
    index.php
    invoice.php
    invoice_jur.php
    invoice_phys.php
    linkpoint.php
    option_value_configurator.php
    printable.php
    products.php
    wishlist.php
    после строк:
    PHP:
        //connect to the database
        
    db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
        
    db_select_db(DB_NAME) or die (db_error());
    Вставляем:
    PHP:
        //установка кодировки
        
    $q db_query("SET NAMES `cp1251`") or die (db_error());
    Если используете кодировку, отличную от Windows-1251, то вместо cp1251 подставить соответственно вашу.
     
    zayts78, CraZee, eminich и 3 другим нравится это.
  2. Dezmant

    Dezmant Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Эм… На хостинге был установлен Shop-Script FREE и вот с ним фокус почему-то не удался, он вообще грузится перестал.:nezn: Можете что-то подсказать? :ah:
     
  3. Dezmant

    Dezmant Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Беда в том что у меня и в базе данный все пишется знаками вопроса… Может это что-то в настройках MySQL?
     
  4. Grifindore

    Grifindore

    Регистр.:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    35
    Тогда попробуйте в самой базе поставить в сравнении юникод (UTF-8). Если не получится, то отпиште сюда, подумаем еще.
     
  5. Dezmant

    Dezmant Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Пробивал и нечего не изменилось.
     
  6. lexxxter

    lexxxter Постоялец

    Регистр.:
    20 мар 2008
    Сообщения:
    96
    Симпатии:
    31
    Была похожая ситуация. Проблема заключалась в том, что сама SQL база была создана в левой кодировке, не поддерживающий русский. Пересоздал базу в utf-8 и все заработало.
    Если хочешь проверить в чем проблема, возми у кого-нить готовую базу и экспортируй через phpMyAdmin.
     
  7. Dezmant

    Dezmant Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    А как правильно пересоздать базу в utf8? У меня почему-то она все ровно пересоздается в левой кодировке…
     
  8. vangoga

    vangoga Постоялец

    Регистр.:
    11 мар 2008
    Сообщения:
    59
    Симпатии:
    10
    У всех таблиц и у всех филдоф есть codepage. наверно latin1_swedish_ci

    вот скрипт

    Код:
    <?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 = 'password';
    $database = 'databse';
    $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";
                echo "ALTER TABLE `$table` CHANGE `$field` `$field` $row[Type] CHARACTER SET $character_set COLLATE $convert_to; \r\n";
            }
        }
    }
     
    ?>
    
    
     
    Dezmant нравится это.
  9. Dezmant

    Dezmant Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Спасибо! Все работает!
     
  10. los

    los Прохожие

    Ничего не помогло. Есть еще варианты?
     
Статус темы:
Закрыта.