sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué las letras árabes no se insertan en la base de datos?

Esto se conoce como Mojibake . Este no es un problema de codificación DB, sino un problema de codificación HTTP. Establecer la codificación de caracteres de la solicitud POST como lo hizo es, de hecho, la solución adecuada.

Los signos de interrogación aparecen cuando ambos los lados de la conexión son conscientes de su propia codificación. Los caracteres enviados/recuperados que no estén cubiertos por la codificación de un lado serán reemplazados por signos de interrogación. Los caracteres árabes no aparecen en ISO-8859-1 y, por lo tanto, se reemplazan por signos de interrogación. Esa es la diferencia con Mojibake, en la que los caracteres se envían sin verificar si la codificación utilizada por el otro lado realmente admite el carácter. Terminará con caracteres codificados incorrectamente que se presentan como una secuencia ininteligible de caracteres.

En este caso particular, el controlador JDBC es consciente de que está usando ISO-8859-1 de forma predeterminada para transmitir los caracteres a la base de datos, mientras que los caracteres recuperados están en UTF-8 (el controlador MySQL JDBC no mira la base de datos). codificación de la tabla, aunque se haya configurado correctamente en UTF-8 en su caso). Debe decirle explícitamente al controlador JDBC que use UTF-8 para decodificar caracteres antes de transmitir datos a la base de datos. Esto se debe hacer como propiedades de conexión de JDBC que se definen como parámetros de cadena de consulta en la URL de JDBC de la siguiente manera:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

Si está utilizando una fuente de datos administrada por contenedor, simplemente especifique esas propiedades por separado de la misma manera que lo hizo para el nombre de usuario y la contraseña

useUnicode=yes
characterEncoding=UTF-8

Ver también: