2010-06-07 9 views

risposta

2

Oggi ho dovuto renderlo tale. Ho già Windows db in minuscolo e ho bisogno di importare in linux db con nomi di maiuscole e minuscole, quindi l'opzione play con lowecase_table_names non è un'opzione :)

Sembra che "mostra tabelle" visualizza i nomi delle tabelle correttamente ordinati e i dump hanno nomi di tabelle sfuggiti con `character. Ho con successo importato il database con seguente algoritmo:

  1. ho mydb.sql con finestre minuscole discarica
  2. ho iniziato applicazione per creare lo schema del database in Linux, con i nomi di maiuscole e minuscole.

Quindi ho nomi minuscoli in dump e nomi case sensitive nel database mysql. Ho convertito la discarica utilizzando sed & awk con seguente 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 

E la discarica è stata convertita correttamente. Tutto funziona dopo l'importazione in Linux.

6

Secondo i manuali di MySQL, si hanno solo un numero limitato di opzioni:

Use lower_case_table_names=1 on all systems. The main disadvantage 

con questo è che quando si utilizza MOSTRA tabelle o MOSTRA database, non lo fai vedere i nomi di il loro originale lettere maiuscole.

Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on 

Windows. Ciò mantiene la lettera maiuscola di nomi di database e tabelle. Lo svantaggio di questo è che è necessario assicurarsi che le proprie dichiarazioni sempre si riferiscano al database e ai nomi delle tabelle con il codice alfabetico corretto su Windows. Se trasferisci le tue istruzioni a Unix, dove la lettera maiuscola è significativa, esse non funzionano se la lettera maiuscola è errata.

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

evitare questi problemi di trasferimento dei dati, è necessario impostare lower_case_table_names a 1 su tutte le piattaforme per costringere i nomi da convertire in minuscolo.

Vedere: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html per tutti i dettagli.

+0

Tutte queste opzioni richiedono che l'utente sia tornato indietro nel tempo e abbia configurato l'opzione database lower_case_table_names prima della creazione dei dati. –

Problemi correlati