Estoy usando el personaje Emoji en mi proyecto. Que los caracteres se guardan (??) en la base de datos mysql. Había utilizado la clasificación predeterminada de la base de datos en utf8mb4_general_ci
. Muestra
1366 Valor de cadena incorrecto: '\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...' para la columna 'comentario' en la fila 1
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
insert into tablename (column1,column2,column3,column4,column5,column6,column7) values ('273','3','Hdhdhdh😜😀😊😃hzhzhzzhjzj 我爱你 ❌',49,1,'2016-09-13 08:02:29','2016-09-13 08:02:29'
Establecer utf8mb4 en la conexión de la base de datos:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Respuestas:
paso 1, cambia el juego de caracteres predeterminado de tu base de datos:
paso 2, establece el juego de caracteres al crear la tabla:
o alterar la mesa
fuente
1) Base de datos: cambie la clasificación predeterminada de la base de datos como
utf8mb4
.2) Tabla: Cambiar la clasificación de la tabla como
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Consulta:
3) Código:
4) Establecer
utf8mb4
en la conexión de la base de datos:fuente
SET NAMES utf8mb4;
para comenzar a guardar emoticones; antes de ese comando los estaba salvando como??
Tanto las bases de datos como las tablas deben tener juego de caracteres
utf8mb4
y clasificaciónutf8mb4_unicode_ci
.Al crear una nueva base de datos , debe usar:
Si tiene una base de datos existente y desea agregar soporte:
También debe establecer el conjunto de caracteres y la clasificación correctos para sus tablas:
o cámbielo si tiene tablas existentes con muchos datos:
Tenga en cuenta que
utf8_general_ci
ya no se recomienda la mejor práctica. Vea las preguntas y respuestas relacionadas:¿Cuál es la diferencia entre utf8_general_ci y utf8_unicode_ci en Stack Overflow?
fuente
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
vsutf8mb4_unicode_ci
para las columnas?Si está utilizando Solr + Mysql + Java, puede usar:
Esto se puede usar:
En el caso anterior, esta es una de las soluciones para almacenar sus emoticones en su sistema.
Pasos para usarlo:
Biblioteca utilizada: import java.net.URLDecoder; import java.net.URLEncoder;
Ejemplo de código:
fuente
%
, su decodificación se romperá.He actualizado mi base de datos y tabla para actualizar de utf8 a utf8mb4 . Pero nada me funciona. Luego intenté actualizar el tipo de datos de columna a blob , por suerte funcionó para mí y los datos se guardaron. Incluso mi base de datos y mi tabla son CHARACTER SET utf8 COLLATE utf8_unicode
fuente
El comando para modificar la columna es:
Y necesitamos usar type =
BLOB
El ejemplo para modificar es el siguiente: -
Verifiqué que las últimas bases de datos mySQL y otras no necesitan
''
usarse en el comando nombre_tabla, nombre_columna, etc.Recuperar y guardar datos: guarde directamente el contenido del chat en la columna y para recuperar datos, obtenga datos como una matriz de bytes
(byte[])
de la columna db y luego conviértalos a,string
por ejemplo, (código Java)fuente
text
/varchar
a ablob
y listo. Locura por convertir charset y cotejo en toda la base de datos solo por eso :)Mi respuesta solo se suma a la respuesta de Selvamani P.
Es posible que también necesite cambiar cualquier
SET NAMES utf8
consulta conSET NAMES utf8mb4
. Eso hizo el truco para mí.Además, este es un gran artículo para portar su sitio web de utf8 a utf8mb4. En particular, el artículo destaca 2 puntos buenos sobre índices y tablas de reparación después de convertirlos a utf8mb4:
ÍNDICES
TABLAS DE REPARACIÓN
Lea más sobre las consultas para reparar tablas en el artículo.
fuente
REPAIR TABLE
yOPTIMIZE TABLE
debería ser innecesario, yALTER
tiene el efecto de hacerlo.El punto principal no se ha mencionado en las respuestas anteriores que,
Necesitamos pasar una cadena de consulta con las opciones
"useUnicode=yes"
y"characterEncoding=UTF-8"
en la cadena de conexiónAlgo como esto
fuente
Bueno, no necesita cambiar todo el conjunto de caracteres DB. En lugar de eso, puedes hacerlo cambiando la columna a blob tipo de .
ALTER TABLE messages MODIFY content BLOB;
fuente
Tengo una buena solución para ahorrarle tiempo. También encuentro el mismo problema pero no pude resolver este problema con la primera respuesta.
Tu personaje definitivo es utf-8. Pero emoji necesita utf8mb4 para admitirlo. Si tiene permiso para revisar el archivo de configuración de mysql, puede seguir este paso.
Por lo tanto, realice el siguiente paso para actualizar su conjunto de caracteres (de utf-8 a utf8mb4).
paso 1. abre tu my.cnf para mysql, agrega estas líneas a tu my.cnf.
paso 2. detenga su servicio mysql e inicie el servicio mysql
¡Terminado! Luego puedes verificar que tu personaje haya cambiado a utf8mb4.
fuente
Compatibilidad con Emoji para aplicaciones que tienen pila de tecnología: mysql, java, springboot, hibernate
Aplique los siguientes cambios en mysql para soporte unicode.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Conexión DB - cambio de url jdbc:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Nota - Si el paso anterior no funciona, actualice la versión del conector mysql a 8.0.15. (mysql 5.7 funciona con la versión de conector 8.0.15 para soporte unicode)
fuente
La solución más simple que funciona para mí es almacenar los datos como json_encode .
más tarde, cuando recupere, solo asegúrese de json_decode .
Aquí no tiene que cambiar la intercalación o el conjunto de caracteres de la base de datos y la tabla.
fuente
Para cualquiera que intente resolver esto en una instancia administrada de MySQL (en mi caso en AWS RDS), la forma más fácil era modificar el grupo de parámetros y establecer el conjunto de caracteres y la clasificación del servidor en
utf8mb4
yutf8mb4_bin
, respectivamente. Después de reiniciar el servidor, una consulta rápida verifica la configuración de las bases de datos del sistema y las nuevas creadas:fuente