Я уже давно обдумывал эту проблему.То, чего я пытаюсь добиться, - это сохранить в базе данных MySQL и затем вывести в окно общепринятые смайлики, такие как ? ? problems (да, проблемы 21-го века)
После значительной части вознии следуя различным учебным пособиям и ответам, найденным на этом сайте, мне удалось добиться возможности сохранять их в базе данных.
В качестве примера у меня есть простая форма для самостоятельной отправки и база данных MySQL, настроенная как UTF8mb4.Если я вставляю эмодзи в текстовое поле и нажимаю «Отправить», он сохраняет данные в таблице базы данных, как и должно быть.При просмотре с использованием phpmyadmin он показывает тестовые смайлики, сохраненные, как и ожидалось.Однако, когда я использую cfquery, чтобы получить строку из базы данных и вывести ее в окно, она показывает простое «?».
Любые идеи?
Дополнительная информация: мое тестовое окно делаетвверху есть следующие теги:
<cfset setEncoding("form","utf-8")>
<cfcontent type="text/html; charset=utf-8">
<cfprocessingdirective pageencoding = "utf-8">
В строке подключения к базе данных также есть allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
, что, кажется, работает, поскольку я могу успешно вставить смайлики.Что мне не хватает?
Редактировать 1
В соответствии с запросом ниже приведен код, используемый для выбора строки, содержащей смайлики из базы данных, и для вывода ее в окно:
<cfquery name="get_ci" datasource="test" username="#application.db_username#" password="#application.db_password#">
SELECT _string
FROM test_table
WHERE _id = 1
LIMIT 1
</cfquery>
<cfoutput>#get_ci._string#</cfoutput>
Редактировать 2 (решение)
После долгих размышлений и, конечно, их было много, вот решение, которое, по крайней мере, сработало для меня.Чтобы обновить сервер MySQL для поддержки UTF8mb4, я использовал это руководство: https://mathiasbynens.be/notes/mysql-utf8mb4 (обратите внимание, что это было сделано задолго до запуска этого потока и не является решением поднятой проблемы).Тем не менее, после того, как с помощью технических специалистов он начал работать с нашим VPS на хостинге, мне удалось успешно сопоставить настройки, и вот ответ: руководство попросило обновить настройки my.ini до следующего:
[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
Однако, рукопожатие и сопоставление были двумя, которые запутали всю операцию.Как только я их закомментировал, wola!Так что на случай, если кто-то еще борется с этой проблемой и прибегает к… Попробуйте закомментировать эти настройки и посмотрите, работает ли он.
Обновлен my.ini с добавленными комментариями:
[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