G Статьи  

Решение проблемы Server sent charset (255) unknown to the client

© 2019-02-10
Guzei.com
Игорь Гузей

Это не точная и окончательная инструкция к действию использующая правильные термины и оптимальные варианты. Это скорее лог текущей проблемы.

Проблема

При подключении к MySQL 8.0 из PHP получаем:
"Server sent charset (255) unknown to the client."

Причина

Банально в несовпадении кодировок сервера и клиента.

Сервер: MySQL 8.0. Новая кодировка по-умолчанию - utf8mb4. Это хорошо и правильно. 4 байта позволяют хранить гораздо больший набор символов.

	character-set-server : utf8mb4
	collation-server     : utf8mb4_0900_ai_ci

Клиент: PHP. Кодировка (в нашем случае) utf8.

Решение

Как обычно можно ставить заплатки или решить радикально и правильно

Правильное решение

Такая проблема возникается, если версия PHP старая. Да, всего-то навсего. В моём случе была версия 7.0.15. Поставил сегодняшнюю последнюю версия 7.3.2. и проблема исчезла. Всё работает на новых кодировка. Читал где-то, что достаточно 7.0.19.

Заплатки

Поставить на сервер кодировку "как раньше".

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

Пару слов о utf8mb4_0900_ai_ci

Это правило по которому символы сравниваются между собой во время сортировки.

Вполне логично использовать имено эти кодировку и правило сравнения. В версии 8.0 они уставливаются по-умолчанию.

Так же можно помнить, что есть правила сортировки и для национальных языков или просто _bin - Binary