Golang se ha convertido en uno de los lenguajes de programación más interesantes en los últimos tiempos. Esto por supuesto no significa ni que sea fácil de usar, ni que esté exento de posibles problemas. Algunas cosas como solucionar el error en Golang 1366 incorrect string value, es provocado por un error humano.
Cómo arreglar el error 1366 en Golang y Mariadb
Este fallo viene dado principalmente por el uso que hacemos de la base de datos, y como la hemos creado.
Este es el error de exactamente:
Mysql err (message_repository.go): Error 1366: Incorrect string value: '\xC5\x99\xC3\xADpa...' for column `tabla`.`mensaje`.`content` at row 1
En concreto, aparece debido a la codificación de la tabla/columna en la que estás intentando insertar los datos, y a que lo estás haciendo de una forma incorrecta.
En este caso estás intentando insertar carácteres de 4 bytes en una tabla configurada para carácteres de 3 bytes. Esto significa que tu tabla o columna seguramente sea utf8 u otra similar y le estés intentando meter carácteres en utf8mb4.
Para evitar el problema en el futuro tienes dos opciones. O bien indicar en la configuración de la base de datos, que todo lo que crees se haga de forma predeterminada en cotejamiento utf8mb4 y utf8mb4_general_ci, o hacerlo tú en cada creación.
Todas las siguientes secciones requiren que te conectes a la terminal de mysql o mariadb, o bien ejecutes los comandos con phpmyadmin:
mysql -uroot -p
Como configurar utf8mb4 de forma predeterminada en MariaDB
Este es el más interesante para mantener la coherencia entre entornos de desarrollo y producción, además de si estás en un estado temprano del proyecto. Yo te lo recomiendo sí o sí, aunque uses alguno de los siguientes para arreglar la base de datos ahora.
Si usas la terminal ejecuta
use mysql;
Si estás en phpmyadmin como root simplemente abre la tabla mysql.
Ejecuta este par de comandos con el cotejamiento que mejor te venga:
SET character_set_server = utf8mb4; SET collation_server = 'utf8mb4_general_ci';
A partir de aquí tanto tablas como columnas usarán las que acabas de poner.
Cómo añadir cotejamiento al crear tablas en MariaDB
Para simplemente añadir el cotejamiento a la hora de crear las tablas, bastará con utilizar la coletilla charset y collate al final de create table.
CREATE TABLE IF NOT EXISTS mitabla ( [...] ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;`
La última línea es la que te interesa y que puedes añadir a cualquier consulta de creación.
Cómo cambiar una tabla a utf8mb4_general_ci en MariaDB
Para actualizar la tabla que sea a utf8mb4_general_ci, basta con ejecutar este comando en la base de datos que quieras modificar.
En terminal
use mibasededatos;
Y luego ejecutas en terminal o en sql de phpmyadmin lo siguiente:
ALTER TABLE mitabla CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Cómo cambiar una columna a utf8mb4_general_ci en MariaDB
Una vez en terminal o phpmyadmin como en el ejemplo anterior, bastará con que ejecutes el siguiente comando para tu tabla y columna.
ALTER TABLE mitabla CHANGE micolumna VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Esto cambiará cualquier cotejamiento para una columna específica y no la tabla entera si no lo necesitas.
En todos los métodos se cambia solo el cotejamiento, aunque ten en cuenta que hacer eso cuando tienes datos dentro de las tablas podría llevar a cambios en los mismos. En esos casos lo mejor es hacer un volcado, y cambiar los cotejamientos en las instrucciones para volver a importar la base de datos y que se inserte todo correctamente.
Si tienes algún problema accediendo por terminal o phpmyadmin dímelo en los comentarios y te echo un cable.
¿Usas MariaDB y Go? ¿Qué proyecto tienes entre manos? Comenta y comparte