Столкнулся со следующей проблемой. Имеем текст
<p><strong><span style="font-size: medium;">
Текст Текст Текст Текст
<img class="emoji" src="http://vk.com/images/emoji/D83DDCB2.png" alt="" />
</p>
При вставке в базу MySQL текст обрезается по символ , то есть остается
<p><strong><span style="font-size: medium;">
Текст Текст Текст Текст <img class="emoji"
src="http://vk.com/images/emoji/D83DDCB2.png" alt="
Вставка происходит в коде php:
$text = PHP_slashes($text); // экранируем кавычки
$sql = "INSERT INTO `{$this->table}` (`text`) VALUE ('$text')";
$this->db->execute($sql);
Попробовал вставить вручную в базу это сообщение - все сработало, только заменился на ?. Такое поведение вполне устраивает, можно бы и вовсе удалить такие символы из сообщения.
Аналогичная проблема на символах и т.д.
Можно ли как-то поправить настройки базы или что-то сделать в коде php, чтобы такие символы переводились в ? или удалялись ?
P.S.: Больше интересует не конкретное решение замены символов в строке, а настройки на все случаи - чтобы база не резала текст, а как-то его сохраняла, заменяя непонятные ей символы.
Update: строка запроса
INSERT INTO `mails` (`text`) VALUE ('<p><strong><span style=\"font-size: medium;\">Текст Текст Текст Текст <img class=\"emoji\" src=\"http://vk.com/images/emoji/D83DDCB2.png\" alt=\"\" /></p>')
Только вместо в текстовом файле отображается квадратик с вопросом
\". – aleksandr barakin Sep 01 '15 at 10:07$sqlвы не пробовали проконтролировать? – aleksandr barakin Sep 01 '15 at 10:25utf8mb4_general_ci. – Visman Sep 01 '15 at 10:30utf8mb4_general_ciв таблицах и в самой базе. Если нет, нужно mysql обновить. – Visman Sep 01 '15 at 11:11SET NAMES 'utf8'замените его наSET NAMES 'utf8mb4'или даже наSET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci'– Visman Sep 01 '15 at 11:46SET NAMES 'utf8'запроса ни где нет в коде, то можете выполнить один из предложенных мной вариантов сразу после подключения к бд. – Visman Sep 01 '15 at 12:00SET NAMES 'utf8'не работает.SET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci'иSET NAMES 'utf8mb4'работает - в базе?вместо символов фигурных. Теперь распишите в ответе что эта опция делает, почему простоSET NAMES 'utf8'не работает и я приму ваш ответ – RussCoder Sep 01 '15 at 12:13SET NAMES 'utf8'не работает? :) Запрос этот работает и указывает, что соединение с базой идет в кодировке utf-8 с максимальной длиной символов 3 байта.SET NAMES 'utf8mb4'же указывает на ту же кодировку, но максимальную длину символов в 4 байта. Вот эти фигуристы символы, как и символы китайского и японского языков кодируются 4 байтами в кодировке utf-8. – Visman Sep 01 '15 at 12:19COLLATE 'utf8mb4_general_ci'что значит? – RussCoder Sep 01 '15 at 12:21SET NAMES 'utf8mb4'...должно корректно работать и в таком случае. – Visman Sep 01 '15 at 12:30?превращались, а так и сохранялись в БД – RussCoder Sep 01 '15 at 12:33utf8mb4_general_ci. – Visman Sep 01 '15 at 12:40