Как мне вставить данные UTF-8 в MySQL, используя Lucee? - PullRequest
1 голос
/ 02 июня 2019

Я пытаюсь вставить символы 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 в порядке.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Хорошо, с небольшой помощью и чтением, мне нужно было добавить "character_set_server = utf8mb4" в файл конфигурации MySQL в "/etc/mysql/my.conf".Похоже, это проблема, вызванная более старой версией коннектора.

Из документации MySQL (благодаря CfSimplicity за вывод меня на страницу) ...

Для коннектора /J 8.0.12 и более ранние: чтобы использовать для соединения набор символов utf8mb4, сервер ДОЛЖЕН быть настроен с параметром character_set_server = utf8mb4;если это не тот случай, когда UTF-8 используется для кодировки символов в строке подключения, он сопоставляется с именем набора символов MySQL utf8, которое является псевдонимом для utf8mb3.

0 голосов
/ 03 июня 2019

Этому 4-байтовому Emoji требуется 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 будет использовать эту настройку до тех пор, пока символьная кодировка не будет установлена ​​в строке подключения.Это эквивалентно автоматическому определению набора символов.

...