2010-06-07 18 views

Respuesta

2

Hoy tuve que hacerlo así. Ya tengo Windows db en minúsculas y necesito importar a linux db con nombres de tablas sensibles a mayúsculas/minúsculas, por lo que la opción de nombre lowecase_table_names no es una opción :)

Parece que 'mostrar tablas' muestra nombres de tabla ordenados adecuadamente y el volcado ha escapado de los nombres de tabla con `carácter. He importado con éxito la base de datos con el siguiente algoritmo:

  1. tengo mydb.sql con ventanas minúsculas volcado
  2. empecé aplicación para crear el esquema de base de datos en Linux, con los nombres de mayúsculas y minúsculas.

Luego he tenido nombres de minúsculas en nombres de volcado y mayúsculas y minúsculas en la base de datos de MySQL. Convertí el vertedero usando sed & awk con el siguiente script:

#!/bin/bash 

MYSQL="mysql -u root -p mydb" 
FILE=mydb.sql 

TMP1=`mktemp` 
TMP2=`mktemp` 

cp $FILE $TMP1 

for TABLE in `echo "show tables" | $MYSQL`; do 
    LCTABLE=`echo $TABLE| awk '{print tolower($0)}'` 
    echo "$LCTABLE --> $TABLE" 
    cat $TMP1 | sed "s/\`$LCTABLE\`/\`$TABLE\`/" > $TMP2 
    cp $TMP2 $TMP1 
done 

cp $TMP1 $FILE.conv 

rm $TMP1 
rm $TMP2 

Y el vertedero se ha convertido correctamente. Todo funciona después de la importación en Linux.

6

De acuerdo con los manuales de MySQL, sólo tienen un número limitado de opciones:

Use lower_case_table_names=1 on all systems. The main disadvantage 

con esto es que cuando se utiliza MOSTRAR tablas o VER BASES DE DATOS, no ver los nombres en su lettercase original .

Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on 

Windows. Esto conserva el lettercase de nombres de bases de datos y tablas. La desventaja de de esto es que debe asegurarse de que sus declaraciones siempre se refieren a los nombres de su base de datos y tablas con el mazo de letras correcto en Windows. Si transfiere sus declaraciones a Unix, donde el lettercase es significativo, no funcionan si el lettercase es incorrecto.

Exception: If you are using InnoDB tables and you are trying to 

evitar estos problemas de transferencia de datos, usted debe establecidos lower_case_table_names a 1 en todas las plataformas para forzar nombres que se convierten en minúsculas.

Ver: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html para más detalles.

+0

Todas estas opciones requieren que el usuario haya retrocedido en el tiempo y haya configurado su base de datos opción low_case_table_names antes de crear los datos. –

Cuestiones relacionadas