MySQL вставляет выражение Emoji

MySQL
MySQL вставляет выражение Emoji

предисловие

Сегодня при оформлении формы обратной связи открытого проекта столкнулся с проблемой, что не вставляется выражение эмодзи, нашел много решений в интернете, и ответы были самые разные, но так и не нашел Неплохо.

После некоторых метаний я, наконец, успешно вставил выражения эмодзи. В этой статье я поделюсь с вами своим процессом реализации. Заинтересованные разработчики могут прочитать эту статью.

написать впереди

Мой сервер - это система Mac, mysql установлен с помощью brew, и расположение его файла конфигурации может отличаться для Windows/Linux, в зависимости от реальной ситуации.

Давайте сначала посмотрим на его сообщение об ошибке:

chat_system> UPDATE chat_system.feedback t SET t.comments = '反馈信息测试😂' WHERE t.id = 1
[2020-12-01 21:36:08] [HY000][1366] Incorrect string value: '\xF0\x9F\x98\x82' for column 'comments' at row 1
[2020-12-01 21:36:08] [HY000][1366] Incorrect string value: '\xF0\x9F\x98\x82' for column 'comments' at row 1

Реализовать идеи

Поскольку база данных по умолчаниюUTF-8Формат кодировки, обычная строка занимает 3 байта, а выражение занимает 4 байта, на данный момент UTF-8 недостаточно, нужно использоватьutf8mb4Набор символов может решить эту проблему.

Примечание: для набора символов utf8mb4 требуется версия базы данных выше 5.5.3.

Итак, что мы собираемся сделать, это следующее:

  • Измените файл конфигурации mysql и установите его формат кодировки.
  • Изменить кодировку набора символов базы данных
  • Изменить кодировку набора символов таблицы базы данных

Процесс реализации

Порядок, в котором mysql считывает конфигурацию по умолчанию, следующий:/etc/my.cnf,/etc/mysql/my.cnf,/usr/local/etc/my.cnf,~/.my.cnf, если эти файлы конфигурации не существуют в соответствующем каталоге, вам необходимо создать новый.

  • Изменить файл конфигурации базы данныхmy.cnf, мой файл находится по адресу:/usr/local/etcниже добавьте следующий код
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
character-set-client-handshake = false
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

  • Измените кодировку набора символов базы данных и выполните следующую инструкцию SQL после входа в MySQL.
# 设置数据库字符集编码,chat_system为数据库名称,根据自己的实际情况而来
ALTER DATABASE chat_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • Измените кодировку набора символов таблицы базы данных и выполните следующую инструкцию SQL после входа в MySQL.
# 设置数据库表字符集编码,chat_system.feedback_comment_reply为我的数据库下对应的表名称,根据自己的实际情况而来
ALTER TABLE chat_system.feedback_comment_reply CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

После выполнения вышеуказанных операций давайте посмотрим, успешно ли выполнена модификация.После входа в mysql выполните следующую инструкцию sql.

SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';

Если отображается подчиненная информация, это означает, что мы завершили модификацию.

image-20201201214142509

прецедент

Давайте вставим эмодзи туда и обратно, чтобы проверить это:

UPDATE chat_system.feedback t SET t.comments = '反馈信息测试😂' WHERE t.id = 1;

Как показано ниже, ошибки нет и вставка прошла успешно.

мы используемdataGrapГлядя на данные в таблице базы данных ниже, как показано ниже, он показывает?, должно быть так, что программа не может его распознать.

image-20201201214741613

Чтобы быть разумным, он должен быть успешно вставлен, Мы попробовали это с интерфейсом запроса почтальона, и он успешно отобразился 😄.

image-20201201215255287

напиши в конце

  • Если в статье есть ошибки, исправьте их в комментариях, если статья вам поможет, ставьте лайк и подписывайтесь 😊
  • Эта статья была впервые опубликована на Наггетс, перепечатка без разрешения запрещена 💌