2010-06-07 8 views

Odpowiedz

2

Dziś musiałem to zrobić. Mam już system Windows db małymi literami i muszę zaimportować do Linux db z nazwami dużych i małych liter, więc opcja z opcją lowecase_table_names nie jest opcją :)

Wygląda na to, że "tabele pokazują" odpowiednio posortowane nazwy tabel i zrzutu uciekły nazwy tabel z `charakterem. Mam pomyślnie zaimportowany do bazy danych z następującym algorytmem:

  1. mam mydb.sql z małymi oknami zrzucić
  2. Zacząłem aplikacji na tworzenie schematu bazy danych w systemie Linux, z nazwami wrażliwych przypadków.

Następnie miałem małe litery w zrzutach i nazwy z rozróżnianiem wielkich i małych liter w bazie danych mysql. I konwertowane zrzutu za pomocą sed & awk z poniższego skryptu:

#!/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 

A wysypisko zostało poprawnie konwertowane. Wszystko działa po zaimportowaniu w systemie Linux.

6

Według podręczników MySQL, masz tylko ograniczoną liczbę opcji:

Use lower_case_table_names=1 on all systems. The main disadvantage 

z tego jest to, że podczas korzystania z show tabel lub SHOW DATABASES, nie zobaczyć nazwy w oryginalna plakietka z numerem .

Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on 

Okna. Zachowuje to literówkę nazw baz danych i tabel. Wadą tego jest to, że musisz zawsze upewnić się, że twoje instrukcje zawsze odnoszą się do Twojej bazy danych i nazw tabel z poprawną literówką na Windows . Jeśli przeniesiesz swoje instrukcje do Uniksa, gdzie znaczek literowy jest znaczący, nie działają one, jeśli litera jest niepoprawna.

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

uniknąć tych problemów transferu danych, należy ustawić lower_case_table_names do 1 na wszystkich platformach, aby wymusić nazwy być konwertowane na małe litery.

Zobacz: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html, aby uzyskać szczegółowe informacje.

+0

Wszystkie te opcje wymagają, aby użytkownik cofnął się w czasie i skonfigurował opcję bazy danych lower_case_table_names przed utworzeniem danych. –

Powiązane problemy