Как правильно настроить кодировку ввода БД?

Рейтинг: 0Ответов: 2Опубликовано: 29.12.2014

В файле httpd.conf Apache

     #
     # Denwer: default charset.
     #
     AddDefaultCharset UTF-8

Сервер баз данных

Сервер: 127.0.0.1 via TCP/IP

Программа: MySQL

Версия программы: 5.5.25 - MySQL Community Server (GPL)

Версия протокола: 10

Пользователь: root@localhost

Кодировка сервера: UTF-8 Unicode (utf8)

У БД, всех таблиц и полей сравнение utf8 unicode ci

В коде php

     header("content-type: text/html; charset=UTF-8");

и

     mysqli_set_charset($link, "utf8");

В html

     <meta charset='utf-8'>

В результате: Скрин1, Скрин2

Как исправить?

Ответы

▲ 1Принят

@tanias08, "%D0%93%D1..." - это url-кодированная строка, тут всё нормально. А вот на первом скрине, где вы показываете данные в таблице, проблемка присутствует и возникает она у вас на этапе внесения данных в базу. И как вы обрабатываете данные перед запросом, было бы гораздо интересней узнать.

P.S. Я не удивлюсь, что причиной ваших бед может быть и Denwer, т.к. проект мёртв уже несколько лет, не обновляется и не поддерживается. Да и сама сборка очень сомнительного качества.

▲ 3

1 способ: Если есть права на изменение /etc/mysql/my.cnf, то попробуйте добавить в него следующее:

character_set_server=utf8
collation_server=utf8_unicode_ci

2 способ: Попробуйте наследоваться от нативного класса mysqli, прописав в конструкторе следующее:

class Db extends mysqli
{
  public function __construct($host = 'localhost', $user, $password, $dbname)
  {
     parent::__construct($host, $user, $password, $dbname);
     $this->set_charset('utf8');
  }
}

$db = new Db('localhost', 'tom', 'pass', 'db_name');