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

0

в запросе на вставку 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().

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

Спасибо

  • 1
    Вы открыты для внедрения SQL! Это огромный риск для безопасности! Не используйте свой код в реальном приложении!
  • 1
    Что такое полное сообщение об ошибке, оно должно указывать на какую-то конкретную часть, которую он считает неправильной («рядом ...»).
Показать ещё 4 комментария
Теги:
alter
utf8mb4

1 ответ

0

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

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

Особенно:

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

Чтобы обсудить далее, предоставьте

  • SHOW CREATE TABLE перед попыткой ALTER. (Я подозреваю, что VARCHAR сейчас CHARACTER SET utf8.)
  • полное сообщение об ошибке. (Думаю, это говорит "рядом с" ХАРАКТЕР... ").)
  • какую версию MySQL вы используете.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню