Добавление emojis в mysql [дубликат]

Это довольно популярный вопрос, поэтому я опубликую свое решение. У меня была та же проблема, и хотя она не идеальна, я думаю, что она работает очень хорошо и не делает частичную зависимость от представления. Мой сценарий состоял в том, что действие было доступно самому, но также могло быть встроено в aa view - google map.

В моем _layout у меня есть:

@RenderSection("body_scripts", false)

В моем index view У меня есть:

@Html.Partial("Clients")
@section body_scripts
{
    @Html.Partial("Clients_Scripts")
}

В моем представлении clients у меня есть (все карта и ассоциативный html):

@section body_scripts
{
    @Html.Partial("Clients_Scripts")
}

Мой Clients_Scripts вид содержит javascript, который будет отображаться на странице

Таким образом, мой сценарий изолирован и может быть отображен на странице, где это необходимо, причем тэг body_scripts отображается только в первом вхождении, что механизм просмотра бритвы находит это.

Это позволяет мне все разделять - это решение, которое хорошо работает для меня, у других могут быть проблемы с ним, но он исправляет дыры «по дизайну».

85
задан Selvamani P 13 September 2016 в 06:12
поделиться

7 ответов

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

2) Таблица: Изменить сортировку таблицы как CHARACTER SET utf8mb4 COLLATE utf8mb4_bin.

Запрос:

ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

3) Код:

INSERT INTO tablename (column1, column2, column3, column4, column5, column6, column7)
VALUES ('273', '3', 'Hdhdhdh                  
115
ответ дан K-Gun 19 August 2018 в 12:01
поделиться
  • 1
    Возможно ли это без изменения коллекции базы данных по умолчанию? – AliN11 10 October 2016 в 09:31
  • 2
    Это не работает для меня. Я получаю & quot; & quot; вместо смайликов. только "☺" это smily сделал его к базе данных безопасно. – Curious Developer 17 March 2017 в 17:10
  • 3
    Может потребоваться обновить не только таблицу до utf8mb4, но ТАКЖЕ сами столбцы, иначе они все равно могут появиться как? вместо – Ael 25 June 2017 в 21:12
  • 4
    Работал для меня, но не забудьте перезапустить MySQL. – Ravi Misra 12 September 2017 в 10:58
  • 5
    тот же вопрос, что и гвоздик? PLS дать мне решение – Anthony Winzlet 20 November 2017 в 05:57

Я обновил мою базу данных и таблицу до версии с utf8 до utf8mb4. Но для меня ничего не работает. Затем я попытался обновить тип данных столбца до blob, к счастью, он работал для меня, и данные были сохранены. Даже моя база данных и таблица - это CHARACTER SET utf8 COLLATE utf8_unicode

1
ответ дан Deepak Arora 19 August 2018 в 12:01
поделиться

Команда для изменения столбца:

ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME TYPE;

И нам нужно использовать type = BLOB

. Пример для изменения: -

ALTER TABLE messages MODIFY content BLOB;

Я проверил, что последние mySQL и другие базы данных не нужны '' для использования в команде на имя_таблицы, имя_каталога и т. д.

Извлечение и сохранение данных: Непосредственно сохранить содержимое чата в столбце и для извлечения данных извлекать данные в виде байтового массива (byte[]) из столбца db, а затем преобразовать его в string, например (Код Java)

new String((byte[]) arr) 
0
ответ дан Harpreet 19 August 2018 в 12:01
поделиться

Если вы используете Solr + Mysql + Java, вы можете использовать:

Это можно использовать:

  • case1: Когда вы не хотите изменять DB .
  • case2: когда вам нужно импортировать смайлики из вашего ядра Mysql в Solr.

В приведенном выше случае это одно из решений для хранения ваших смайликов в вашей системе .

Шаги по его использованию:

Используемая библиотека: import java.net.URLDecoder; import java.net.URLEncoder;

  1. Использовать urlEncoder для кодирования вашей строки, содержащей смайлики.
  2. Хранить в DB без изменения MysqlDB.
  3. Вы может хранить его в ядре solr (декодированная форма), если вы хотите, или вы можете хранить закодированную форму.
  4. При извлечении этих смайликов из ядра DB или Solr вы можете его декодировать с помощью urlDecoder.

Пример кода:

import java.net.URLDecoder;
import java.net.URLEncoder;

public static void main(String[] args) {
    //SpringApplication.run(ParticipantApplication.class, args);
    System.out.println(encodeStringUrl("                  
10
ответ дан Miguel Almeida 19 August 2018 в 12:01
поделиться

Мой ответ добавляет только ответ Selvamani P.

Вам также может потребоваться изменить любые SET NAMES utf8 запросы с помощью SET NAMES utf8mb4. Это сделал трюк для меня.

Кроме того, это отличная статья для переноса вашего сайта с utf8 на utf8mb4. В частности, статья делает 2 хороших момента на индексах и восстанавливает таблицы после их преобразования в utf8mb4:

INDEXES

При преобразовании с utf8 в utf8mb4 максимальная длина столбца или индексный ключ не изменяется в байтах. Поэтому он меньше по характеру, потому что максимальная длина символа теперь составляет четыре байта вместо трех. [...] У механизма хранения InnoDB максимальная длина индекса составляет 767 байт, поэтому для столбцов utf8 или utf8mb4 вы можете индексировать максимум 255 или 191 символ соответственно. Если у вас в настоящее время есть столбцы utf8 с индексами длиной более 191 символа, вам нужно будет индексировать меньшее количество символов при использовании utf8mb4.

РЕМОНТНЫЕ ТАБЛИЦЫ

После обновления сервера MySQL и внесения необходимых изменений, описанных выше, обязательно отредактируйте и оптимизируйте все базы данных и таблицы. Я не делал этого сразу после обновления (я не думал, что это было необходимо, поскольку все, казалось, отлично работало с первого взгляда), и столкнулись с некоторыми странными ошибками, в которых заявления UPDATE не имели никакого эффекта, хотя нет Ошибки были брошены.

Подробнее о запросах для восстановления таблиц в статье.

4
ответ дан Nicola Pedretti 19 August 2018 в 12:01
поделиться
  • 1
    REPAIR TABLE и OPTIMIZE TABLE должны быть излишними - эффект ALTER влияет на их выполнение. – Rick James 26 February 2018 в 05:06

шаг 1, измените кодировку по умолчанию вашей базы данных:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

, шаг 2, установите кодировку при создании таблицы:

CREATE TABLE IF NOT EXISTS table_name (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;

или alter table

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name modify name text charset utf8mb4;
6
ответ дан ospider 19 August 2018 в 12:01
поделиться
  • 1
    Я выполнил эти запросы и остановил и перезапустил сервер mysql, но когда я пытаюсь вставить emojis в свою таблицу, я все равно получаю ту же ошибку. Все команды прошли успешно, кроме INSERT. INSERT INTO Записи (дата, время, подпись) ЗНАЧЕНИЯ (2018-05-20 ', '12: 38: 00', 'Описание тестирования с emoji: – user 20 May 2018 в 17:18
  • 2
    Для вашего соединения также должно быть utf8mb4, а не utf8. – Henrik Hansen 26 June 2018 в 11:00
3
ответ дан Anthony Winzlet 31 October 2018 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: