Я использую персонаж Emoji в своем проекте. Эти символы сохраняются (??) в базе данных MySQL. Я использовал базу данных Default collation в utf8mb4_general_ci
. Это шоу
1366 Неверное строковое значение: '\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...' для столбца 'comment' в строке 1
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
insert into tablename (column1,column2,column3,column4,column5,column6,column7) values ('273','3','Hdhdhdh😜😀😊😃hzhzhzzhjzj 我爱你 ❌',49,1,'2016-09-13 08:02:29','2016-09-13 08:02:29'
Установите utf8mb4 в соединение с базой данных:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Ответы:
шаг 1, измените кодировку вашей базы данных по умолчанию:
шаг 2, установите кодировку при создании таблицы:
или изменить таблицу
источник
1) База данных: Изменить параметры сортировки базы данных по умолчанию
utf8mb4
.2) Таблица: изменить сопоставление таблицы как
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Запрос:
3) Код:
4) Установите
utf8mb4
в базе данных соединение:источник
SET NAMES utf8mb4;
чтобы начать сохранять смайлики; перед этой командой он??
И базы данных, и таблицы должны иметь набор символов
utf8mb4
и параметры сортировкиutf8mb4_unicode_ci
.При создании новой базы данных вы должны использовать:
Если у вас есть база данных, и вы хотите добавить поддержку:
Вам также необходимо установить правильный набор символов и параметры сортировки для ваших таблиц:
или измените его, если у вас есть существующие таблицы с большим количеством данных:
Обратите внимание, что
utf8_general_ci
больше не рекомендуется передовая практика. Смотрите соответствующие вопросы и ответы:В чем разница между utf8_general_ci и utf8_unicode_ci в переполнении стека.
источник
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
противutf8mb4_unicode_ci
столбцов?Если вы используете Solr + Mysql + Java, вы можете использовать:
Это может быть использовано:
В приведенном выше случае это одно из решений для хранения ваших смайликов в вашей системе.
Шаги, чтобы использовать это:
Используемая библиотека: import java.net.URLDecoder; импорт java.net.URLEncoder;
Пример кода:
источник
%
, ваше декодирование будет нарушено.Я обновил свою базу данных и таблицу до обновленного с utf8 до utf8mb4 . Но у меня ничего не работает. Затем я попытался обновить тип данных столбца до blob , к счастью, он сработал и данные были сохранены. Даже моя база данных и таблица - CHARACTER SET utf8 COLLATE utf8_unicode
источник
Команда для изменения столбца:
И нам нужно использовать тип =
BLOB
Пример для изменения приведен ниже:
Я проверил, что последние MySQL и другие базы данных не нужно
''
использовать в команде для table_name, column_name и т.д.Извлекать и сохранять данные: напрямую сохранять содержимое чата в столбец и извлекать данные, извлекать данные в виде байтового массива
(byte[])
из столбца db, а затем преобразовывать их,string
например, в (код Java)источник
text
/varchar
на a,blob
и все готово. Безумие, чтобы преобразовать кодировку и сопоставление на всей БД только для этого :)Мой ответ только добавляет к Selvamani P ответ.
Вам также может понадобиться изменить любые
SET NAMES utf8
запросы с помощьюSET NAMES utf8mb4
. Это помогло мне.Кроме того, это отличная статья для переноса вашего сайта с utf8 на utf8mb4. В частности, статья делает 2 хороших замечания об индексах и исправлении таблиц после преобразования их в utf8mb4:
ИНДЕКСЫ
РЕМОНТНЫЕ СТОЛЫ
Подробнее о запросах на восстановление таблиц читайте в статье.
источник
REPAIR TABLE
иOPTIMIZE TABLE
должно быть ненужным - этоALTER
дает эффект их выполнения.Главное не было упомянуто в ответах выше, что
Нам нужно передать строку запроса с параметрами
"useUnicode=yes"
и"characterEncoding=UTF-8"
в строке подключенияЧто-то вроде этого
источник
Ну, вам не нужно менять всю БД Charset. Вместо этого вы можете сделать это, изменив столбец на тип blob .
Сообщения ALTER TABLE ИЗМЕНИТЬ содержимое BLOB;
источник
У меня есть хорошее решение, чтобы сэкономить ваше время. Я также сталкиваюсь с той же проблемой, но не смог решить эту проблему первым ответом.
Ваш персонаж по умолчанию - utf-8. Но для поддержки Emoji необходим utf8mb4. Если у вас есть разрешение на пересмотр файла конфигурации mysql, вы можете выполнить этот шаг.
Поэтому выполните этот следующий шаг, чтобы обновить свой набор символов (с utf-8 до utf8mb4).
шаг 1. откройте my.cnf для mysql, добавьте следующие строки в my.cnf.
шаг 2. остановите службу MySQL и запустите службу MySQL
Законченный! Затем вы можете проверить, что ваш персонаж изменен на utf8mb4.
источник
Поддержка Emoji для приложений, имеющих технический стек - mysql, java, springboot, hibernate
Примените ниже изменения в MySQL для поддержки Unicode.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Соединение с БД - изменение URL JDBC:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Примечание. Если вышеуказанный шаг не работает, обновите версию MySQL-коннектора до 8.0.15. (mysql 5.7 работает с версией соединителя 8.0.15 для поддержки юникода)
источник
Самое простое решение, которое работает для меня, - это хранить данные как json_encode .
позже, когда вы получите, просто убедитесь, что вы json_decode его.
Здесь вам не нужно менять параметры сортировки или кодировки базы данных и таблицы.
источник
Для тех , кто пытается решить эту проблему на экземпляре управляемой MySQL (в моем случае на AWS RDS), самый простой способ был изменить группу параметров и установить набор символов сервера и сортировки , чтобы быть
utf8mb4
иutf8mb4_bin
, соответственно. После перезагрузки сервера быстрый запрос проверяет настройки системных баз данных и всех вновь созданных:источник