Cómo omitir inválida utf8 cadena de caracteres en mysql

Tengo un gran archivo de texto que contiene el texto árabe de datos. Cuando intento cargar en una tabla MySQL, tengo un error diciendo Error code 1300: invalid utf8 character string. Esto es lo que he intentado hasta ahora:

LOAD DATA INFILE '/var/lib/mysql-files/text_file.txt'
IGNORE INTO TABLE tblTest
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';

Traté de ignorar este error, pero no funciona. He intentado LOCAL INFILE, pero no funcionó, también. Mi base de datos fue creada mediante DEFAULT CHAR SET UTF8 y DEFAULT COLLATE utf8_general_ci. El archivo de texto es utf-8 codificados.

No quiero que los registros que contienen no válido de caracteres utf8. Entonces, ¿cómo puedo cargar los datos de ignorar los registros que contengan esos caracteres no válidos?

Gracias de antemano!

InformationsquelleAutor Mohammed | 2016-11-20

2 Kommentare

  1. 3

    Sería de gran ayuda para tener el HEX de el travieso personaje.

    Un posible acercamiento a la lectura de todo el texto, a continuación, tratar con ninguna mala caracteres:

    1. Leer en una columna de tipo VARBINARY o BLOB.

    2. Bucle a través de las filas, tratando de copiar a un VARCHAR o TEXT columna.

    Otro plan es el uso de utf8mb4 en lugar de utf-8. Puede ser que el mal carácter es un Emoji o carácter Chino que va a trabajar en utf8mb4, pero no utf8.

    Ignorar los errores

    Este puede permiten ignorar los errores:

    SET @save := @@sql_mode;
    LOAD DATA ...;
    SET @@sql_mode := @save;
    • En Python, me captura cualquier excepción y decidir la acción a realizar cuando tal excepción se produce, por ejemplo, except ValueError: continue y así sucesivamente. Pero no estoy seguro de si esta técnica está disponible en MySQL.
    • Update: Tuve que comprobar todos los caracteres que están disponibles en el archivo de texto usando Python chars = {c for c in textfile}. He encontrado un par más extraños caracteres que han sido limpiados utilizando regex. Después de eso, el MySQL load statement trabajó muy bien con utf-8 y text como los tipos de las columnas de texto. Gracias, se extendió Rick James por su ayuda. Estoy marcando la respuesta aceptada.
    • Tiene una enorme acerca del respeto de mí, pero su respuesta es ineficiente. La pregunta no es sobre malos caracteres. Se trata de ignorar las malas caracteres en la importación.
    • Los puntos de hecho. He añadido a mi respuesta. En la revisión de sql_mode, me pregunto si él está golpeando una fecha malo o algo sin relación con el árabe.
    • Gracias. No funciona, pero gracias. MySQL 5.7 no tiene un sql_mode que ignora los malos caracteres y el término IGNORE todavía arroja un error en lugar de una advertencia, que no hace nada bien tampoco. dev.mysql.com/doc/refman/5.7/en/sql-mode.html. Es esta la misma en futuras versiones de MySQL?
    • Yo soy adivinanzas que strict_mode (o tal vez algo más) sería la diferencia entre «ignorar» y «error». sql_mode tiende a ser aumentada en las nuevas versiones, especialmente 8.0. Y el valor por defecto tiende a cambiar-que conducen a las incompatibilidades. Ten cuidado.

  2. 3

    Tengo este problema cuando intente usar MySQL 5.7.14, demasiado.

    Volví a MySQL 5.6 y este problema desapareció

    • Puede usted proporcionar los detalles?
    • ¿Cuál es el valor de sql_mode?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea