Emoji и ColdFusion - PullRequest
       7

Emoji и ColdFusion

0 голосов
/ 18 октября 2018

Я уже давно обдумывал эту проблему.То, чего я пытаюсь добиться, - это сохранить в базе данных 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

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Решение:

После долгих размышлений и, конечно, их было много, вот решение, которое, по крайней мере, сработало для меня.Чтобы обновить сервер 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
0 голосов
/ 19 октября 2018

Перейдите к администратору ColdFusion> Настройки сервера> Java и JVM.В свои аргументы JVM добавьте -Dfile.encoding=UTF-8.Затем перезапустите ColdFusion.

И в базе данных MySQL кодировка таблицы должна быть utf8mb4.Я не помню, должны ли поля 'Кодировка и сопоставление' также указываться так.

...