За последние 24 часа нас посетили 62095 программистов и 1781 робот. Сейчас ищут 843 программиста ...

запись кирилицы в БД

Тема в разделе "PHP для новичков", создана пользователем ionico, 27 авг 2008.

  1. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Здравствуйте. Тревожит следующая проблема:
    записываю некоторые данные в Базу Данных вот так:

    Код (Text):
    1.  
    2. $db = @mysql_connect("localhost", "", "");
    3. if (!$db) {
    4. echo "ERROR - Could not connect to MySQL";
    5. } else {
    6. echo "Connected to MySQL";
    7. }
    8. @mysql_select_db("table");
    9. mysql_query("SET NAMES 'utf8';");
    10. mysql_query("SET CHARACTER SET 'utf8';");
    11. mysql_query("SET SESSION collation_connection = 'utf8_general_ci';");
    12. $query = "INSERT INTO main(id,log,pas,eml,nick,rname,isadm) VALUES ('','$d1','$d2','$d3','$d4','$d5','0')";
    13. trim($query);
    14. $result = mysql_query($query);
    все данные латиницей записываются нормально, но вот переменная $d5 всегда содержит строку из кирилицы, и в базу данных почему-то записывается пустая строка '', почему?
    подскажите пожалуйста, как исправить? заранее спасибо.
    с уважением, Дмитрий.
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Не тревожся! Просто пиши set names не перед селектом/инсертом/и т.д., а после коннекта к базе.
     
  3. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    таблицу в студию. он может записать в поле не той кодировкой, но не записать ни чего... а, она, пардон, приходит вообще $d5?
    ps trim($query); классно=) особенно при учёте что запрос сам, ручками писал=) ни кому доверять нельзя, даже себе!
    pps echo mysql_erorr(); - обычно помагает
     
  4. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    GudGuy -так он говорит что запись пишится ... причем тут mysql_erorr(); ?? и говорит $d5 - точно непустое ...
    вариант несовпадения кодировки таблицы ? .... или бывает при конвертировании залипает .... вообщем мало данных

    З.Ы.: для отладки могу посоветовать echo $query; :) ... и там посмотреть что и как пытается инсертится ...
     
  5. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    кодировка соответствующей ячейки в таблице в БД - utf8_general_ci

    я новенький в PHP и MySQL, только начал учить недавно... объясните, почему не нужен trim?
    и $d5 - ТОЧНО НЕ ПУСТОЕ

    каких данных не хватает? я предоставлю! =)
     
  6. Anonymous

    Anonymous Guest

    [sql]SHOW VARIABLES LIKE 'char%'[/sql]
    Что показывает?
     
  7. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    трим удаляет пробелы в конце и начале строки, а там их и так нет;)
     
  8. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Олег, а где это написать?
     
  9. dazik

    dazik Активный пользователь

    С нами с:
    16 июл 2008
    Сообщения:
    26
    Симпатии:
    0
    Код (Text):
    1. $conn=mysql_connect("localhost","root","1");
    2. if(!$conn)
    3. die("не могу соедениться с базой");
    4.  
    5.  
    6. $DB=mysql_select_db("test");
    7. if(!$DB)
    8. die("не могу выбрать базу");
    9.  
    10. mysql_query("SET NAMES 'cp1251'");
     
  10. Anonymous

    Anonymous Guest

    или в консоли mysql, или на худой конец в phpmyadmin
     
  11. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    показывает это:

    Variable_name ----------------- Value
    character_set_client------------ utf8
    character_set_connection ----- utf8
    character_set_database ------- latin1
    character_set_filesystem ------ binary
    character_set_results ---------- utf8
    character_set_server ---------- latin1
    character_set_system --------- utf8
    character_sets_dir ------------- /usr/share/mysql/charsets/
     
  12. Anonymous

    Anonymous Guest

    Бесполезно выставлять кодировку соединения в cp1251, если сама база в latin1
     
  13. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    т.е. я не смогу никаким образом записать кирилицу в эту БД ?