Set names utf8, проблема с сопоставлением кодировки?

в начале скрипта объявляю:
SET NAMES 'utf8';
в базе все отлично и читаемо;

но иногда есть переменные в другой кодировке ср1251 или koi
при их добавлении mysql вываливается в ошибку, как сделать что бы их игнорировал и сохранял в таблицу.
DBD::mysql::db do failed: Incorrect string value: '\xCF\xF0\xE8\xE3\xEB\xE0...' for column

как это избежать?

Часть настроек:
mysql> show variables like "%character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
  • Вопрос задан
  • 373 просмотра
Пригласить эксперта
Ответы на вопрос 1
orlov0562
@orlov0562
I'm cool!
Никак, передавай мускулу валидные данные, а фильтруй на стороне бэкэнда.

Если это php, то например так:
$text = iconv("UTF-8", "UTF-8//IGNORE", $text);
или так
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');


Еще можешь попробовать использовать кодировку utf8mb4, но даже если поможет, лучше фильтровать или детектить кодировку и преобразовывать на стороне бэкэнда, чтобы в базе всегда были валидные данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы