Все после греческого письма пусто в моей базе данных - PullRequest
0 голосов
/ 16 октября 2019

Я столкнулся с ошибкой кодирования, но не могу найти слабое звено в моей логике. В частности, при попытке вставить греческую лямбду в мою базу данных после лямбды ячейка остается пустой.

Процесс:

Перед печатью любого html я делаю:

header('Content-Type: text/html; charset=utf-8');

Далее я подключаюсь, используя PDO:

$dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['dbname'] . ';charset=utf8';
 $options = array(
            PDO::ATTR_EMULATE_PREPARES => false, 
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        );
        try {
            $dbh = new PDO($dsn, $config['username'], $config['password'], $options);
            $dbh->exec("SET NAMES utf8");
            $dbh->exec("SET FOREIGN_KEY_CHECKS = 1");

Когда я делаю

ПОКАЗАТЬ ПОЛНЫЕ КОЛОННЫ ИЗ my_table

Я вижу, что сортировка - это utf8_general_ci. Когда я делаю:

echo mb_detect_encoding ($ data_to_be_entered);

Я получаю UTF-8

Когда я выводю $ data_to_be_entered в консоль справапрежде чем вставить его в базу данных, я вижу: (? = 23)

Однако в моей базе данных я просто вижу (как запись.

)

1 Ответ

0 голосов
/ 17 октября 2019

Эта лямбда ? является математическим символом. Он кодируется в UTF-8 как четыре байта шестнадцатеричные F09D9C86. Поэтому ему нужен MySQL CHARACTER SET utf8mb4, а не utf8.

. Если вам нужна греческая лямбда λ, то она отлично работает с CHARACTER SET utf8 (или utf8mb4). Гекс для него это CEBB.

...