преобразовать столбец json в utf8mb4

в запросе вставки MySQL я использовал ($text отправляется $_POST и колонка MESSAGE в формате JSON):

$data = '{"mytext":".'$text'."}';

INSERT INTO xxxxx (MESSAGE) VALUES('$mytext');

я застрял со следующей проблемой:

Некоторые смайлики отображаются нормально, но некоторые с «?»

Я искал здесь ответ и обнаружил, что utf8mb4 должен быть установлен в базе данных, таблицах и столбцах.

Эта проблема это когда я пытаюсь следующее, которое содержит мое зарегистрированное сообщение:

ALTER TABLE xxxxx CHANGE column_name column_name JSON CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Результат выше

У вас есть ошибка в вашем синтаксисе SQL;

Я предполагаю, что это возможно только на Varchar() колонка.

У вас есть идеи о том, как я могу сделать эту работу?

Спасибо

0

Решение

Некоторые смайлики отображаются нормально, но некоторые с «?»

Начните с поиска проблем, которые вызывают «вопросительный знак» из Проблемы с символами UTF-8; то, что я вижу, не то, что я храню

Особенно:

  • Сохраняемые байты не кодируются как utf8mb4. Почини это.
  • Столбец в базе данных не является CHARACTER SET utf8mb4. Почини это. (Использование SHOW CREATE TABLE чтобы увидеть, что это в данный момент.)
  • Кроме того, проверьте, что соединение во время чтения является UTF-8.

Для дальнейшего обсуждения, пожалуйста, предоставьте

  • SHOW CREATE TABLE прежде чем пытаться ALTER, (Я подозреваю, что VARCHAR Сейчас CHARACTER SET utf8.)
  • полное сообщение об ошибке. (Я предполагаю, что там написано «возле» CHARACTER … «.)
  • какую версию MySQL вы используете.

В руководстве говорится: «MySQL обрабатывает строки, используемые в контексте JSON, с использованием набора символов utf8mb4 и параметров сортировки utf8mb4_bin.», Я заключаю, что вам не нужно указывать ни набор символов, ни сопоставление для типа данных JSON,

0

Другие решения

Других решений пока нет …