2012-06-14 29 views
6

Estoy escaneando archivos de 5000 csv en una base de datos. Lamentablemente, los archivos tienen '', para 0. Por lo tanto, cada vez que ejecuto mi script, falla. Escuché que es posible evitar este error simplemente deshabilitando el modo estricto. Así que intenté desactivar el modo estricto para permitirme leer en una cadena vacía como un 0 para mis campos numéricos. Sin embargo, el error persistió.Deshabilitar el modo estricto de MySQL

Entonces, ¿la desactivación del modo estricto permite '' leerse en un campo int? (El '' es decir, dos qoutes cadena vacía)

Si es así ¿por qué ajuste

sql_mode = ''

en el archivo de configuración my.ini no soluciona el problema.

¡Gracias!

Respuesta

17

Supongo que importa el archivo CSV usando el comando LOAD DATA INFILE. Antes de ejecutar este comando, escriba:

SET sql_mode = ''; 

Más información acerca de varios modos SQL se puede encontrar en el documentation.

+1

Sí, usted es el correcto. Esto funciona perfectamente Estoy un poco perplejo de por qué la configuración no se mantuvo, pero llamar esto antes de que el comando LOAD DATA funcionara. Gracias. – Orlan

+0

enlace está muerto. [Haga clic aquí para obtener documentación] (https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-setting) y detalles de ** Modos SQL del servidor ** – gentleboy

1

Puede modificar su declaración LOAD DATA INFILE para corregir los valores. Algo a lo largo de estas líneas debería funcionar.

LOAD DATA INFILE 'filepath.csv' 
INTO TABLE MyTable(Column1,@Col2,@Col3) 
SET Column2=CASE WHEN @Col2 = '' THEN 0 ELSE @Col2 END 
,Column3=CASE WHEN @Col3 = '' THEN 0 ELSE @Col3 END; 

Esta consulta importa el valor que está en la columna 1, y las correcciones de los valores de las columnas 2 y 3. uso de este, no tienen que desactivar el modo estricto, y que son en realidad en el control de los datos va a su base de datos, puede arreglarlo de manera confiable. También puede usar esta función para cambiar los formatos de fecha o importar valores de blob hexadecimales. Característica muy útil.

+0

Buena solución . No sabía que es posible procesar el flujo de datos en este punto. – jkrcma

0

Estoy poniendo esto en una respuesta ya que todavía tengo el representante para comentar en su pregunta de seguimiento sobre la configuración que no se "mantiene". Mi experiencia con MySQL ha sido que las configuraciones en el archivo de configuración solo se leen al iniciar el servidor, por lo que tendrías que reiniciar el servidor para que la nueva configuración surta efecto.

El servidor es el daemon con el que el cliente de la línea de comandos se comunica cuando ejecuta comandos para que reiniciar el cliente de la línea de comandos no reinicie realmente el servidor.

Se proporciona una explicación más detallada en esta respuesta: https://serverfault.com/a/79051.

1

Necesito hacer esto, y funcionan correctamente:

  1. Para desactivar el modo estricto SQL, SSH a su servidor como root
  2. crear este archivo: /etc/mysql/conf.d/ disable_strict_mode.CNF
  3. Abrir el archivo y entrar en estas dos líneas:

    [mysqld] sql_mode = IGNORE_SPACE, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

  4. Reinicio de MySQL con este comando: service sudo mysql reiniciar

Cuestiones relacionadas