MySQL error incorrect string value: for column at row

Недавно в своей практике при работе с СУБД MySQL встретил не приятную досадную ошибку вида incorrect string value:'\x81\xAE\xA3\xA4\xA0\xAD'for column 'name' at row 1. При этом значения шестнадцатеричной строки и названия столбца естественно могут быть другими, однако суть при этом не меняется.

Так вот понятное дело, что проблема в кодировках. Т.е. что-то где то не так настроено, но вот что именно? Пришлось потратить на это не мало времени дабы разобраться. Поискав в интернете решение узнал, что с подобной ситуацией сталкиваются довольно многие. Забавно, что везде люди дают совершенно разные, порой совсем не мыслимые, советы. На самом же деле всё просто. Оказалось, что нужно просто после соединения с СУБД MySQL явно объявить ей кодировку соединения (общения, обмена данными). Делается это при помощи команды SET NAMES, которая в раз исправит вашу проблему. Так вот соединяемся и далее сразу же пишем данную команду, и естественно не забываем дописать нужную кодировку, например для PHP это выглядит примерно так:

<?php
mysql_query("SET NAMES cp1251");
?>

Ну или так, что более приемлемо: SET NAMES utf8.
Т.е., как видим, тут явно объявляем кодировку обмена данными с сервером СУБД MySQL. Естественно кодировка должна быть валидная для MySQL.

Эта команда регулирует кодировку в которой будут обмениваться клиент и сервер. Т.е. у вас на сервере данные могут лежать в какой угодно кодировке, например, UTF-8, присоединяясь к серверу, вы при помощи SET NAMES говорите, хочу обмениваться данными в кодировке, например, Windows-1251. После этого сервер, при получении от вас данных автоматически перекодирует их из Windows-1251 в UTF-8, а при отправке вам данных наоборот из UTF-8 в Windows-1251. Только нужно каждый раз сообщать ему, в какой кодировке вы хотите общаться, иначе он будет работать в latin1 (MySQL родом из Швеции).

В интернете же по этой теме, что только не советуют, от добавления дополнительных директив задания кодировок в конфигурационный файл my.ini и вплоть до смены кодировки всей базы данных и всех таблиц с utf8 на модернизированную utf8mb4. В общем как всегда, кто во, что горазд.

Думаю на этом вопрос исчерпан, спасибо за  внимание.

Поделиться!
Tags: , , , , , ,

49.66MB | MySQL:54 | 0,279sec