Запись emoji смайлов в базу данных mysql

P
На сайте с 13.09.2014
Offline
0
8269

Добрый вечер, проблема в следующем.

Необходимо записывать данные получаемые от API Вконтакте в базу данных MySQL. Данные передаются в кодировке windows-1251. Проблема в том, что в данных встречаются смайлы emoji и при записи в базу данных некоторые смайлы отображаются в виде знаков вопроса. MySQL имеет тип полей, сравнение базы и таблицы в кодировке utf8mb4_general_ci, которая как раз подходит для сохранения такого типа данных (4 байта на символ). Что я только не перепробовал. Либо текст сохраняется нормально, а смайлы в нем в виде знаков вопроса, либо все сохраняется в полном объеме, но в виде кракозябр.

Надеюсь на Вашу помощь, может быть кто-то сталкивался с подобной проблемой?

R
На сайте с 29.07.2011
Offline
49
#1

Сохраняем вторым способом, но при запросе к БД на вставку устанавливаем значение кодировки, выполнив запросы

mysql_query('SET NAMES utf8');

mysql_query('SET CHARACTER SET utf8');

mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"');

P
На сайте с 13.09.2014
Offline
0
#2

Спасибо за ответ. Попробовал сделать всё так, к сожалению, результат записаный в БД выглядит следующим образом:

рџЄрџІрџ’‚💂👦🙉🙉🙈🚖🚄🎠💒🚢🚝🚐🗿㊙🔄🔄🔕📃🎼🎵🎾🎱 Р*то тестовая запись

т.е. в кодировке cp1251

В оригинале это было:

"

---------- Добавлено 14.09.2014 в 08:14 ----------

Вот даже на форуме не отображается сообщение с emoji ))

ДП
На сайте с 23.11.2009
Offline
203
#3

А смотрите результат вы через phpmyadmin или тем же php-скриптом выводите?

У меня на одном сайте, если в базу через phpmyadmin залезть - тоже аналогичный текст можно увидеть, а на сайте всё ок и добавляется и показывается.

siv1987
На сайте с 02.04.2009
Offline
427
#4
Poacherx:
т.е. в кодировке cp1251

Это utf8 который отображается как cp1251. Вы либо не правильно смотрите данные, либо на как-то шаге у вас ломается кодировка.

При вставке - SET NAMES 'utf8'

При чтение - SET NAMES 'utf8'

При отображение - header('Content-type: text/html; charsetr=utf-8');

Mad_Man
На сайте с 10.11.2008
Offline
162
#5
siv1987:
При отображение - header('Content-type: text/html; charsetr=utf-8');

Лишний символ в директиве.

P
На сайте с 13.09.2014
Offline
0
#6
Дикий пионер:
А смотрите результат вы через phpmyadmin или тем же php-скриптом выводите?
У меня на одном сайте, если в базу через phpmyadmin залезть - тоже аналогичный текст можно увидеть, а на сайте всё ок и добавляется и показывается.

Спасибо за наводку! :)

Действительно в PHP My admin выводится все в кракозябрах, но если вывести данные на страницу из базы, все получается как надо. Меня это устраивает

siv1987:
Это utf8 который отображается как cp1251. Вы либо не правильно смотрите данные, либо на как-то шаге у вас ломается кодировка.
При вставке - SET NAMES 'utf8'
При чтение - SET NAMES 'utf8'
При отображение - header('Content-type: text/html; charsetr=utf-8');

Благодарю за ответ, всё поправил :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий