2013-12-05 4 views
29

Я пытаюсь сохранить твит в моей таблице MYSQL. tweet является:Неверное строковое значение: ' xF0 x9F x8E xB6 xF0 x9F ...' MySQL

Quiero дия меня escuches, не т.х burles не тех Риасов, anoche Тьюв ип Sueño дие того Fuiste де ми вид & # x1f3b6; & # x1f3b6;

Последние два символа являются 'MULTIPLE MUSICAL NOTES' (U+1F3B6), для которых кодировка UTF-8 0xf09f8eb6.

Поле tweet_text в моей таблице закодировано в utf8mb4. Но когда я пытаюсь сохранить твит в этой колонке я получаю следующее сообщение об ошибке:

Неправильное значение строки: «\ xF0 \ x9F \ x8E \ XB6 \ xF0 \ x9F ...» для столбца «tweet_text» в строке 1.

Что происходит не так? Как я могу это исправить? Мне нужно также хранить несколько языков, и этот набор символов работает для всех языков, но не для специальных символов, таких как смайлики и эможи.

Это мой создать таблицу заявление:

CREATE TABLE `twitter_status_data` (
    `unique_status_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `metadata_result_type` text CHARACTER SET utf8, 
    `created_at` text CHARACTER SET utf8 NOT NULL COMMENT 'UTC time when this Tweet was created.', 
    `id` bigint(20) unsigned NOT NULL COMMENT 'Unique tweet identifier', 
    `id_str` text CHARACTER SET utf8 NOT NULL, 
    `tweet_text` text COMMENT 'Actual UTF-8 text', 
    `user_id_str` text CHARACTER SET utf8, 
    `user_name` text COMMENT 'User''s name', 
    `user_screen_name` text COMMENT 'Twitter handle', 
    `coordinates` text CHARACTER SET utf8, 
    PRIMARY KEY (`unique_status_id`), 
    KEY `user_id_index` (`user_id`), 
    FULLTEXT KEY `tweet_text_index` (`tweet_text`) 
) ENGINE=InnoDB AUTO_INCREMENT=82451 DEFAULT CHARSET=utf8mb4; 
+4

ли вы установили набор символов подключения к базе данных в 'utf8mb4'? – eggyal

+0

Извините, что вы подразумеваете под символьным набором подключения к базе данных? Набор символов базы данных - utf8mb4, а сортировка - utf8mb4_general_ci – db1

+0

. Я получаю подобное сообщение об ошибке для этого твита, а также https://twitter.com/OfficialMansi/status/406007380241969152 В конце твита есть смайлик. Сообщение об ошибке: Неверное строковое значение: «\ xF3 \ xBE \ x8D \ x83 h ...» для столбца «tweet_text» в строке 1 – db1

ответ

52

я, наконец, смог выяснить этот вопрос. мне пришлось изменить некоторые параметры в конфигурации тузд my.ini Эта статья помогла много http://mathiasbynens.be/notes/mysql-utf8mb4#character-sets

Первого я изменил набор символов в my.ini к utf8mb4 Далее я побежал следующие команды в тузде клиенте

SET NAMES utf8mb4; 
ALTER DATABASE dreams_twitter CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; 

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

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 
+3

Примечание: если вы используете * node npm sequelize * + MySQL, вам нужно установить кодировку специальным образом, который, казалось, был причудливым, по крайней мере для меня. https://github.com/sequelize/sequelize/issues/395 – treejanitor

8

я попал в такую ​​же проблему и узнал FOLLO wing-

Несмотря на то, что база данных имеет набор символов utf-8 по умолчанию, столбцы базы данных могут иметь различный набор символов в MySQL. Модифицированного дБ и проблематичный столбец UTF-8:

mysql> ALTER DATABASE MyDB CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' 

mysql> ALTER TABLE database.table MODIFY COLUMN column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL; 

Теперь, создавая новые таблицы с:

> CREATE TABLE My_Table_Name (
    twitter_id_str VARCHAR(255) NOT NULL UNIQUE, 
    twitter_screen_name VARCHAR(512) CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
    ..... 
) CHARACTER SET utf8 COLLATE utf8_unicode_ci;