mysqldump проблема с чувствительностью к регистру? Win-> Linux - PullRequest
5 голосов
/ 07 июня 2010

Когда я выкидываю таблицу с заглавными буквами, используя mysqldump, она выглядит как строчная в моем файле> dump.sql. Я нашел отчет здесь в 2006 году, почти 4 года http://bugs.mysql.com/bug.php?id=19967

A решение здесь предлагают сделать Linux нечувствительным. Я бы предпочел не по возможности. Какой самый простой способ скопировать win32 db в Linux?

Ответы [ 2 ]

6 голосов
/ 07 июня 2010

Согласно руководствам MySQL, у вас есть только ограниченное количество опций:

  • Используйте lower_case_table_names = 1 во всех системах. Основной недостаток с этим то, что при использовании SHOW ТАБЛИЦЫ или ПОКАЗАТЬ Базы данных, вы не увидеть имена в их оригинале lettercase.

  • Используйте lower_case_table_names = 0 в Unix и lower_case_table_names = 2 в Окна. Это сохраняет корпус базы данных и имен таблиц. Недостатком этого является то, что вы должны убедитесь, что ваши заявления всегда обратитесь к вашей базе данных и именам таблиц с правильным регистром на Окна. Если вы передадите заявления в Unix, где lettercase важно, они не работают, если неправильный регистр.

    Исключение: Если вы используете таблицы InnoDB и пытаетесь избежать этих проблем с передачей данных, Вы должны установить lower_case_table_names 1 на всех платформах, чтобы заставить имена для преобразования в нижний регистр.

См .: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html для получения полной информации.

2 голосов
/ 09 октября 2012

Сегодня я должен был сделать это так. У меня уже есть Windows db в нижнем регистре, и мне нужно импортировать в linux db с именами таблиц, чувствительных к регистру, так что играть с опцией lowecase_table_names нельзя:)

Похоже, что 'show tables' отображает соответственно отсортированные имена таблиц, и дамп экранировал имена таблиц с символом `. Я успешно импортировал базу данных по следующему алгоритму:

  1. У меня есть mydb.sql с дампом Windows в нижнем регистре
  2. Я запустил приложение для создания схемы базы данных в Linux с именами, чувствительными к регистру.

Тогда у меня были строчные имена в дампе и чувствительные к регистру имена в базе данных mysql. Я преобразовал дамп с помощью sed & awk с помощью следующего скрипта:

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

И дамп был преобразован правильно. Все работает после импорта в Linux.

...