emojis mysql twitter utf-8 emoticons

emojis - mysql store emoji



Valor de cadena incorrecto: ''/ xF0 / x9F / x8E / xB6 / xF0 / x9F...'' MySQL (3)

Finalmente pude descifrar el problema. Tuve que cambiar algunas configuraciones en la configuración mysql my.ini Este artículo me ayudó mucho http://mathiasbynens.be/notes/mysql-utf8mb4#character-sets

Primero cambié el conjunto de caracteres en my.ini a utf8mb4. Luego ejecuté los siguientes comandos en el cliente de MySQL.

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

Use el siguiente comando para verificar que los cambios estén hechos

SHOW VARIABLES WHERE Variable_name LIKE ''character/_set/_%'' OR Variable_name LIKE ''collation%'';

Intento almacenar un tweet en mi tabla MYSQL. El tweet es:

quiero que escuches, no te burles no te rias, anoche tuve un sueño que te fuiste de mi vida 🎶🎶

Los dos caracteres finales son "NOTAS MÚSPLES MUSICALES" (U + 1F3B6) , para las cuales la codificación UTF-8 es 0xf09f8eb6 .

El campo tweet_text en mi tabla está codificado en utf8mb4 . Pero cuando intento almacenar el tweet en esa columna, aparece el siguiente mensaje de error:

Valor de cadena incorrecto: ''/ xF0 / x9F / x8E / xB6 / xF0 / x9F ...'' para la columna ''tweet_text'' en la fila 1.

¿Qué está pasando mal? ¿Cómo puedo arreglar esto? Necesito almacenar varios idiomas también y este conjunto de caracteres funciona para todos los idiomas pero no para los caracteres especiales como emoticones y emojis.

Esta es mi declaración de crear tabla:

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;


Me había topado con el mismo problema y aprendí lo siguiente-

Aunque la base de datos tiene un conjunto de caracteres predeterminado de utf-8, es posible que las columnas de la base de datos tengan un juego de caracteres diferente en MySQL. DB modificado y la columna problemática para 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;

Ahora creando nuevas tablas con:

> 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;


Puede ser obvio, pero aún me sorprendió que SET NAMES utf8 no sea compatible con la codificación utf8mb4 . Entonces, para algunas aplicaciones, cambiar la codificación de tabla / columna no fue suficiente. Tuve que cambiar la codificación en la configuración de la aplicación.

Redmine (ruby, ROR)

En config/database.yml :

production: adapter: mysql2 database: redmine host: localhost username: redmine password: passowrd encoding: utf8mb4

Aplicación personalizada de Yii (PHP)

En config/db.php :

return [ ''class'' => yii/db/Connection::class, ''dsn'' => ''mysql:host=localhost;dbname=yii'', ''username'' => ''yii'', ''password'' => ''password'', ''charset'' => ''utf8mb4'', ],

Si tiene utf8mb4 como codificación de columna / tabla y sigue obteniendo errores como este, asegúrese de haber configurado el juego de caracteres correcto para la conexión de base de datos en su aplicación.