За последние 24 часа нас посетили 22411 программистов и 1059 роботов. Сейчас ищут 680 программистов ...

MariaDB и кодировка.

Тема в разделе "MySQL", создана пользователем iGlass, 25 ноя 2016.

  1. iGlass

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

    С нами с:
    11 сен 2013
    Сообщения:
    8
    Симпатии:
    2
    Всем привет. У меня такая проблема, есть сервер на CentOS с установленной mariadb, и есть проблема с кодировкой, всё что из базы выдёргивается весь контент вопросами.

    В /etc/my.cnf такой сетап

    Код (Text):
    1.  
    2. [mysqld]
    3. collation-server = utf8_unicode_ci
    4. init-connect='SET NAMES utf8'
    5. character-set-server = utf8
    Но если сделать
    Код (Text):
    1. vardump($this->db->get_charset());
    То получается это
    Код (Text):
    1. object(stdClass)#6 (8) { ["charset"]=> string(6) "latin1" ["collation"]=> string(17) "latin1_swedish_ci" ["dir"]=> string(0) "" ["min_length"]=> int(1) ["max_length"]=> int(1) ["number"]=> int(8) ["state"]=> int(801) ["comment"]=> string(20) "cp1252 West European" }
    Даже если внутри скрипта указать явно кодировку соеденения "$this->db->set_charset('utf8'); То проблема остаётся. Может кто-нибудь вкурсе как заставить MariaDB понять, что я не хочу latin1 кодировку.

    В интернетах гуглил особо ничего не нашёл, только вот про конфиг.

    Заранее спасибо за ответы
     
  2. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    При коннекте к MySQL укажите явно кодировку. Делается это обычно отправкой простого запроса:
    Код (SQL):
    1. SET NAMES utf8;
     
  3. iGlass

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

    С нами с:
    11 сен 2013
    Сообщения:
    8
    Симпатии:
    2
    А вы наверно, не полностью пост прочитали :)
    Ну по сути "SET NAMES UTF8" == set_charset('utf8')
    Код (Text):
    1. Даже если внутри скрипта указать явно кодировку соеденения "$this->db->set_charset('utf8'); То проблема остаётся.
     
  4. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
  5. iGlass

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

    С нами с:
    11 сен 2013
    Сообщения:
    8
    Симпатии:
    2
    А с mysql нельзя работать как с объектом, я работаю с mysqli
     
    topas нравится это.
  6. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    @iGlass, но может быть вы всё-таки попробуете?
     
  7. iGlass

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

    С нами с:
    11 сен 2013
    Сообщения:
    8
    Симпатии:
    2
    Всё вопрос исчерпан
    Вот такая конструкция помогла :)
    Заработался перед дедлайном)))

    PHP:
    1. $this->db->set_charset("utf8");
    --- Добавлено ---
    Я пробовал, не хотело работать. $this->db->set_charset, тоже не хотел работать, с указателем на текущий линк, линк убрал и он заработал..
     
    topas нравится это.
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    Я так понял, что ты пытался в объектной версии использовать набор параметров процедурной версии. Эти вызовы равнозначны

    mysqli::set_charset
    ( string $charset )
    mysqli_set_charset ( mysqli $link , string $charset )

    Ни MariaDB, ни SET NAMES не виноваты ))) Они решают задачу, просто ты был невнимателен.
    --- Добавлено ---
    Чтобы задать кодировку соединения по умолчанию, в my.cnf прописывают такое:

    Код (Text):
    1. [client]
    2. default-character-set   = utf8
    Но советую таки не надеяться на это, а явно указывать set_charset в скрипте!
     
  9. iGlass

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

    С нами с:
    11 сен 2013
    Сообщения:
    8
    Симпатии:
    2
    Я честно говорю, просто не скинул фрагмент этот, я указывал в секции клиента про utf8.
    Толку зеро было.
    Пробовал в панели управления сервером ispmanager, указать utf8 для дефолтной кодировки и нифига не помогало.
    Ну про объектную версию ты правильно подметил, да чёт тупанул про линк на коннект, но потом исправился)))
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    дефолтная кодировка базы и дефолтная кодировка клиента (т.е. соединения) это разные вещи.