Я пытаюсь вставить символы UTF-8 в таблицу MySQL, используя Lucee, и мне не повезло.
Код, который я запускаю, выглядит следующим образом...
<cfset textValue = '? Person Raising Hand'>
<cfdump var = "#textValue#">
<cfquery name = "insert">
INSERT INTO TEST_UTF8 (TestText)
VALUES ('#textValue#');
</cfquery>
Дамп работает нормально и отображается так, как должен, но вставка возвращает следующую ошибку...
"Неверное строковое значение: "\xF0\x9F\x99\x8B P..." для столбца "TestText" в строке 1"
Я попытался вставить ту же строку через phpmyadmin, и все идет нормально, предполагая, что конфигурация MySQL в порядке.
Версия соединителя: «MySQL Connector Java mysql-connector-java-5.1.38 (Revision: fe541c166cec739c74cc727c5da96c1028b4834a) (JDBC 4.0)»






Этот 4-байтовый эмодзи нуждается в MySQL utf8mb4; utf8 не пойдет. Для внешнего мира utf8mb4 называется UTF-8 (с тире)`.
В столбце таблицы должно быть написано CHARACTER SET utf8mb4, и в соединении также должно быть написано:
Добавьте ?useUnicode=yes&characterEncoding=UTF-8 к URL-адресу JDBC.
<%@ page language = "java" pageEncoding = "UTF-8"%>
<%@ page contentType = "text/html;charset=UTF-8" %>
compileJava.options.encoding = 'UTF-8'
<form method = "post" action = "/your/url/" accept-charset = "UTF-8">
Чтобы использовать 4-байтовую кодировку UTF8 с Connector/J, настройте сервер MySQL с помощью character_set_server=utf8mb4. Затем Connector/J будет использовать этот параметр, если в строке подключения не задано значение characterEncoding. Это эквивалентно автоопределению набора символов.
Строка подключения уже содержит «useUnicode=true&characterEncoding=UTF-8» и столбец таблицы (и таблицу), которые я пробовал с «utf8mb4_unicode_ci», «utf8mb4_unicode_520_ci» и «utf8mb4_bin», все с теми же результатами.
Хорошо, после небольшой дополнительной помощи и чтения мне нужно было добавить «character_set_server=utf8mb4» в файл конфигурации MySQL в «/etc/mysql/my.conf». Похоже, это проблема, вызванная более старой версией коннектора.
Из документов MySQL (спасибо CfSimplicity за то, что привели меня на страницу)...
For Connector/J 8.0.12 and earlier: In order to use the utf8mb4 character set for the connection, the server MUST be configured with character_set_server=utf8mb4; if that is not the case, when UTF-8 is used for characterEncoding in the connection string, it will map to the MySQL character set name utf8, which is an alias for utf8mb3.
Я думаю, вы могли бы избежать изменения конфигурации вашего сервера, просто обновив коннектор до версии 8.0.13 или выше (хотя при переходе с 5.x на 8.x потребуется тестирование, поскольку имя класса изменилось).
Вероятно, это проблема с Connector/J, а не с самой Lucee. Какую версию соединителя вы используете (например, расширение источника данных MySQL)? Еще немного информации, которая может помочь: dev.mysql.com/doc/connector-j/8.0/en/…