И вновь про mysql и кириллицу

271
11 апреля 2017, 09:32

Имеется БД с параметрами:

| character_set_client                    | latin1                                                                                    
| character_set_connection                | latin1                                                                                    
| character_set_database                  | latin1                                                                                    
| character_set_filesystem                | binary                                                                                    
| character_set_results                   | latin1                                                                                    
| character_set_server                    | latin1                                                                                    
| character_set_system                    | utf8                                                                                                                                                  
| collation_connection                    | latin1_swedish_ci                                                                         
| collation_database                      | latin1_swedish_ci                                                                         
| collation_server                        | latin1_swedish_ci

Добавляю в эту БД таблицу с параметром DEFAULT CHARSET=utf8

Далее делаю вставку записей в эту таблицу с кириллическими значениями.

Пробовал перед созданием таблицы, либо вставкой делать:

SET NAMES utf8
SET NAMES utf8 COLLATE utf8_general_ci
SET CHARACTER SET utf8

Все без толку, вместо кириллицы вставляются '?'

Что еще можно сделать, чтобы кириллица вставлялась корректно?

Настройки БД менять не вариант, т.к. пишу плагин для уже существующей системы.

Answer 1

Рассмотрите такого рода вариант.Надеюсь поможет=)

class DB
{
private static $db;
private function __construct(){}
public static function getConnection() {
    if (self::$db === null){
        self::$db = new mysqli('localhost', 'root','','db_name');
        self::$db ->query("SET CHARSET utf8");
    }
    return self::$db;
}
}
Answer 2

Исследовал вопрос. Установил phpMyAdmin. Даже при вставке русского текста в таблицу через веб-интерфейс (при этом таблица в utf8, бд в latin1) в итоге вместо кириллицы отображаются вопросы.

В общем, выход один - переконвертация кодировки бд в utf8.

Для справки - плагин разрабатывается для FreePBX. БД FreePBX создает автоматически при установке, полагаю.

READ ALSO
Сгруппировать значения в массив по ID

Сгруппировать значения в массив по ID

ЗдравствуйтеЕсть таблица с диалогами и сообщениями (обычный ассоциативный запрос)

283
The source attachment does not contain the source for the file

The source attachment does not contain the source for the file

В Eclipse в редакторе кода пытаюсь открыть из своего кода класс драйвера orgpostgresql

238
Передача символов в Netty (Java)

Передача символов в Netty (Java)

ПриветствуюНа сервер передается пакет, с ним буффер строки

269
Java EE - эффективное обучение [требует правки]

Java EE - эффективное обучение [требует правки]

Около года( с небольшими паузами ) изучаю Java

207