Как сохранить символ Emoji в моей базе данных SQL



Я использую символ Emoji в своем проекте. Что символы сохраняются (??) в базу данных mysql. Я использовал параметры сортировки базы данных по умолчанию в utf8_general_ci.
Это показать




1366 неверное строковое значение: 'xF0x9Fx98x83xF0x9F...' для столбцов
"комментарий" в строке 1


983   7  

7 ответов:

1) база данных: изменить параметры сортировки базы данных по умолчанию как utf8.

2) Таблица: изменить параметры сортировки таблицы как CHARACTER SET utf8 COLLATE utf8_bin.

запрос:

ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin

3) Код:

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;

  1. использование средств кодирования для кодирования строки, имеющие смайликов.
  2. хранить его в БД без изменения MysqlDB.
  3. вы можете хранить его в Solr core (декодированная форма), если хотите, или вы можете хранить закодированная форма.
  4. при извлечении этих смайликов из 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

    Ничего не найдено.