Кодировка Unicode - Ошибка 1366: Неверное строковое значение: '\ xF0' для столбца

Я испытываю некоторую проблему с обработкой данных кодирования MySQL, а затем сохраняю данные из API Twitter.

Твиттер, который пытается сохранить в db:

   INSERT INTO 'statuses' ('status_id','text') VALUES('93332222111111','The beers are on me in this case!�')

is является этот. тогда как следующее хранилище сохранено успешно:

INSERT INTO 'statuses' ('status_id','text') VALUES('485072105225921','RT @someone: 🔥 Don\'t forget to index timestamp columns like \"created_at\" if you query against them.\n\ne.g.: ORDER BY created_at\ne.g.: WH')

Давайте рассмотрим набор символов:

SHOW VARIABLES LIKE 'character_set%'

который возвращает

character_set_client    utf8mb4
character_set_connection    utf8mb4
character_set_database  utf8mb4
character_set_filesystem    binary
character_set_results   utf8mb4
character_set_server    utf8
character_set_system    utf8
character_sets_dir  /usr/local/Cellar/mysql/5.7.18_1/share/mysql/charsets/

Что-нибудь очевидное, что мне не хватает?

Обновление: также следующий блок if:

if utf8.ValidString(strings.Join(values, ",")) == false {
            fmt.Println(strings.Join(values, ","))
        }

возвращает:

'The beers are on me in this case!�','943304851980963841' 
-1
источник поделиться
2 ответа

Два возможных решения проблемы:

  • Используйте кодировку UTF16;
  • Используйте utf8mb4 как char set и utf8mb4_unicode_ci как сортировку.

Вы можете использовать следующий код в качестве примера, извлеченный из онлайн-учебника:

# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Поскольку ваша проблема не связана с базой данных, вы должны использовать правильный код, представляющий изображение. Я предлагаю вам использовать "emoji-java": легкую библиотеку java, которая поможет вам использовать Emojis в ваших Java-приложениях.

Пример:

String str = "An :grinning:awesome :smiley:string 😄with a few :wink:emojis!";
String result = EmojiParser.parseToUnicode(str);
System.out.println(result);
// Prints:
// "An 😀awesome 😃string 😄with a few 😉emojis!"

Другое редактирование: теперь вы просто говорите, какой язык вы используете: Go. В этом случае вы можете взглянуть на Go-emoji здесь. Или даже этот другой проект emoji.

0
источник

Не используйте utf16 для чего-либо.

Использовать MySQL CHARACTER SET utf8mb4; он эквивалентен внешнему миру UTF-8 и включает символы, начинающиеся с hex F0. (MySQL utf8 не включает их.)

🔥, hex F09F94A5 требуется utf8mb4. То же для 🍻, hex F09F8DBB.

означает, что что-то уже перепутано. То есть, INSERT получил плохой характер.

Пожалуйста, предоставьте SELECT HEX(text)... чтобы узнать, есть ли у вас одно из этих шестнадцатеричных значений.

Также см. "Черный бриллиант" в " Проблема с символами UTF-8"; я не вижу того, что я хранил

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос