Как сохранить символ Emoji в моей базе данных SQL
Я использую символ Emoji в своем проекте. Что символы сохраняются (??) в базу данных mysql. Я использовал параметры сортировки базы данных по умолчанию в utf8_general_ci.
Это показать
1366 неверное строковое значение: 'xF0x9Fx98x83xF0x9F...' для столбцов
"комментарий" в строке 1
7 ответов:
1) база данных: изменить параметры сортировки базы данных по умолчанию как
utf8.2) Таблица: изменить параметры сортировки таблицы как
CHARACTER SET utf8 COLLATE utf8_bin.запрос:
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin3) Код:
INSERT INTO tablename (column1, column2, column3, column4, column5, column6, column7) VALUES ('273', '3', 'Hdhdhdhhzhzhzzhjzj 我爱你 ', 49, 1, '2016-09-13 08:02:29', '2016-09-13 08:02:29')4) Set
utf8в соединении с базой данных:$database_connection = new mysqli($server, $user, $password, $database_name); $database_connection->set_charset('utf8');
Если вы используете Solr + Mysql + Java, вы можете использовать:
Это можно использовать :
- case1: когда вы не хотите изменять БД.
- case2: когда вам нужно импортировать смайлики из вашего Mysql в Solr core.
в данном случае это одно из решений для хранения ваших смайликов в вашей системе.
шаги, чтобы использовать:
используемая библиотека: импорт java. net. URLDecoder; импорт java. net. URLEncoder;
- использование средств кодирования для кодирования строки, имеющие смайликов.
- хранить его в БД без изменения MysqlDB.
- вы можете хранить его в Solr core (декодированная форма), если хотите, или вы можете хранить закодированная форма.
- при извлечении этих смайликов из DB или Solr core теперь вы можете декодировать его Используя urlDecoder.
пример кода:
import java.net.URLDecoder; import java.net.URLEncoder; public static void main(String[] args) { //SpringApplication.run(ParticipantApplication.class, args); System.out.println(encodeStringUrl("3⃣5⃣3⃣‼〽♋♍♋♍⬅⬆⬅⬅ ")); System.out.println(decodeStringUrl("Hello+emoticons%2C%2C%F0%9F%98%80%F0%9F%98%81%F0%9F%98%8A%F0%9F%98%8B%F0%9F%98%8E%F0%9F%98%8A%F0%9F%98%8D%E2%98%BA%F0%9F%98%98%E2%98%BA%F0%9F%98%91%F0%9F%98%87%F0%9F%98%98%F0%9F%98%8B%F0%9F%90%84")); } public static String encodeStringUrl(String url) { String encodedUrl =null; try { encodedUrl = URLEncoder.encode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { return encodedUrl; } return encodedUrl; } public static String decodeStringUrl(String encodedUrl) { String decodedUrl =null; try { decodedUrl = URLDecoder.decode(encodedUrl, "UTF-8"); } catch (UnsupportedEncodingException e) { return decodedUrl; } return decodedUrl; }
Шаг 1, измените кодировку вашей базы данных по умолчанию:
ALTER DATABASE database_name CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;Шаг 2, Установите кодировку при создании таблицы:
CREATE TABLE IF NOT EXISTS table_name ( ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;или alter table
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE table_name modify name text charset utf8;
мой ответ только добавляет к ответу Selvamani P.
вам также может потребоваться изменить любой
SET NAMES utf8запросSET NAMES utf8. Что сделал трюк для меня.и это отличная статья для переноса вашего сайта с utf8 на utf8. В частности, статья делает 2 хороших пункта на индексах и восстанавливает таблицы после преобразования их в utf8:
индексы
когда преобразование из utf8 в utf8, максимальная длина столбца или ключ индекса не изменяется в байтах. Таким образом, он меньше с точки зрения символов, потому что максимальная длина символа теперь четыре байта вместо трех. [...] Механизм хранения InnoDB имеет максимальную длину индекса 767 байт, поэтому для столбцов utf8 или utf8 вы можете индексировать максимум 255 или 191 символов соответственно. Если в настоящее время у вас есть столбцы utf8 с индексами длиной более 191 символа, вы будете необходимо индексировать меньшее количество символов при использовании utf8.
РЕМОНТ ТАБЛИЦ
после обновления сервера MySQL и внесения необходимых изменений объяснено выше, убедитесь, что восстановить и оптимизировать все базы данных и таблицы. Я не сделал этого сразу после обновления (я не думал, что это пришлось, так как все вроде бы работало нормально на первый взгляд), а столкнулся с некоторыми странными ошибками, где операторы обновления не имели любой эффект, хотя никаких ошибок не выдается.
подробнее о запросах на восстановление таблиц в статье.
я обновил свою базу данных и таблицу для обновления с utf8 до utf8. Но у меня ничего не получается. Затем я попытался обновить тип данных столбца до blob, к счастью, это сработало для меня, и данные были сохранены. Даже моя база данных и таблица оба набор символов utf8 COLLATE utf8_unicode
основной момент не был упомянут в приведенных выше ответах, что,
нам нужно передать строку запроса с параметрами
"useUnicode=yes"и"characterEncoding=UTF-8"в строке подключениячто-то вроде этого
mysql://USERNAME:PASSWORD@HOSTNAME:PORT/DATABASE_NAME?useUnicode=yes&characterEncoding=UTF-8
команда для изменения столбца:
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME TYPE;и нам нужно использовать type =
BLOBпример для изменения, как показано ниже: -
ALTER TABLE messages MODIFY content BLOB;Я проверил, что последние mySQL и другие базы данных не нужны
''для использования в команду на имя_таблицы, имя_столбца и т. д.извлечение и сохранение данных: Непосредственно сохраните содержимое чата в столбец и для извлечения данных извлеките данные в виде массива байтов
(byte[])из столбца БД, а затем преобразовать его вstringнапример (код Java)new String((byte[]) arr)
Comments