Как вставить данные UTF-8 в MySQL с помощью Lucee?

Я пытаюсь вставить символы UTF-8 в таблицу MySQL, используя Lucee, и мне не повезло.

  • У меня есть таблица MySQL, настроенная на использование utf8mb4_unicode_ci, но я также пробовал utf8mb4_bin.
  • Я пробовал Apache как с включенным «AddDefaultCharset UTF-8», так и без него.
  • Строка подключения к базе данных включает «characterEncoding=UTF-8».
  • Конфиг Lucee включает UTF-8 в настройках кодировки.

Код, который я запускаю, выглядит следующим образом...

<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 в порядке.

Вероятно, это проблема с Connector/J, а не с самой Lucee. Какую версию соединителя вы используете (например, расширение источника данных MySQL)? Еще немного информации, которая может помочь: dev.mysql.com/doc/connector-j/8.0/en/…

CfSimplicity 02.06.2019 22:28

Версия соединителя: «MySQL Connector Java mysql-connector-java-5.1.38 (Revision: fe541c166cec739c74cc727c5da96c1028b4834a) (JDBC 4.0)»

Jay2001 02.06.2019 23:42
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
337
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот 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», все с теми же результатами.

Jay2001 03.06.2019 00:05
Ответ принят как подходящий

Хорошо, после небольшой дополнительной помощи и чтения мне нужно было добавить «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 потребуется тестирование, поскольку имя класса изменилось).

CfSimplicity 03.06.2019 10:23

Другие вопросы по теме