MYSQL - Хранение символов юникода (эмодзи) в столбце ТЕКСТ - PullRequest
0 голосов
/ 06 июля 2018

При попытке вставить символ смайлика Юникода (?) в таблицу MYSQL происходит сбой вставки из-за ошибки;

Incorrect string value: '\\xF0\\x9F\\x98\\x8E\\xF0\\x9F...' for column 'Title' at row 1

Из того, что я рассказал об этой проблеме, это, по-видимому, вызвано набором символов по умолчанию для таблиц и, возможно, неправильным набором символов по умолчанию для столбцов. В этом посте предлагается использовать utf8mb4, который я пробовал, но вставка все еще не работает.

Вот моя конфигурация таблицы;

CREATE TABLE `TestTable` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `InsertDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Title` text,
  `Description` text,
  `Info` varchar(250) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `xId_TestTablePK` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2191 DEFAULT CHARSET=utf8mb4;

Обратите внимание, что столбцы Title и Text не имеют явно заданного набора символов. Изначально у меня не было набора символов таблицы по умолчанию, и эти два столбца были настроены с помощью DEFAULT CHARSET=utf8mb4. Однако, когда я изменил кодировку таблицы по умолчанию на ту же, они были удалены (предположительно потому, что столбцы наследуют тип от таблицы?)

Может кто-нибудь помочь мне понять, как я могу хранить эти значения Unicode в моей таблице?

Стоит отметить, что я в Windows и пытаюсь выполнить эту вставку в MYSQL Workbench. Я также пытался использовать C # для вставки в базу данных, указав набор символов с CHARSET=utf8mb4, однако это вернуло ту же ошибку.

EDIT

Чтобы попытаться вставить эти данные, я выполняю следующее:

INSERT INTO TestTable (Title) SELECT '??';

enter image description here

Редактировать

Не уверен, что это актуально или нет, но моя база данных также настроена с тем же набором символов по умолчанию;

CREATE DATABASE `TestDB` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

1 Ответ

0 голосов
/ 07 июля 2018

соединение должно установить, что клиент говорит utf8mb4, а не только utf8. Это включает в себя изменение параметров, используемых во время подключения. Или выполнение SET NAMES utf8mb4 сразу после подключения.

...