Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

MYSQL ПРИ ЗАПРОСЕ ВОЗВРАЩАЕТ ОШИБКУ (PHP)

꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂ Мастер (1912), на голосовании 3 года назад
Выполняю sql запрос. Мускул возвращает ошибку - Incorrect string value: '\x93, \xD0\xBE\xD1...' for column 'name' at row 1
Кодировка utf8_general_ci (вся бд, включая таблицы и поля, запрос в такой же кодировке, пробовал и другие кодировки)
Как починить? Уже час сижу, головой об стенку бьюсь, не пойму как сделать
Голосование за лучший ответ
Редис Александрович Оракул (79332) 3 года назад
Не бейся пожалуйста. У тебя строка не в UTF8 которую ты вводишь. Откуда ты ее берешь?
꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂Мастер (1912) 3 года назад
она в ютф8, все работало нормально до определенного момента, потом перестало работать
Редис Александрович Оракул (79332) Вася Пупкин, ну тогда бейся.
Евгений Высочин Просветленный (37979) 3 года назад
Если хочешь ввести кириллицу, то сперва в запросе пиши set names cp1251; потом после точки с запятой свой запрос на выборку (select...) или на обновление (update set ...). И всё это одной строкой.
Senior Developer Мастер (2208) 3 года назад
Задача решается очень просто. Надо на всю базу, включая поля таблиц использовать сопоставление utf8mb4.
У тебя проблема скорее всего в том, что ты подаешь в MySQL символы, которые требуют для хранения 4 байта, а это - проблема кодировки.
Исправишь - все заработает.
꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂Мастер (1912) 3 года назад
Все равно не работает
꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂Мастер (1912) 3 года назад
Попробовал cp1251, с трудом записи добавляются, в 90% случаев выскакивает Incorrect string value: '\xD1\xC2\xBB...
꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂Мастер (1912) 3 года назад
Вообщем, заработало на cp1251
꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂Мастер (1912) 3 года назад
Нет. Них*я не заработало:
꧁Ṧ̠̀ǿ̡͍ℓ̧͈ℰ҉̣ℐ͖́ℓ̫͟ ꧂Мастер (1912) 3 года назад
mysql так и сыплет ошибками
Senior DeveloperМастер (2208) 3 года назад
В настройках MySQL сервера должно быть:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Проверь еще в какой кодировке происходит соединение с MYSQL, когда выполняется запрос: SET NAMES 'utf8mb4';

Потом переведи collation самой базы данных в кодировку, которая поддерживает расширенные символы UTF8, т. е. мультибайтную кодировку mb4.

CP2151 работать НЕ будет, как и любые другие кодировки, которые не поддерживают символы, которые должны храниться с использованием не менее 4байт, например, смайлики эмоджи.
Senior DeveloperМастер (2208) 3 года назад
Или, если делать более быстро, попробуй хотя бы для этого поля (из-за которого происходит ошибка - ведь в него же вставляются данные) сменить кодировку только хотя бы у него:
ALTER TABLE `table`
MODIFY `description` VARCHAR(xxx) CHARACTER SET utf8mb4;
Или для всей данной таблицы:
ALTER TABLE `table` CONVERT TO CHARACTER SET utf8mb4;
Senior DeveloperМастер (2208) 3 года назад
И перед выполнением INSERT, обязательно:
SET NAMES 'utf8mb4';
Похожие вопросы