2012-01-07 2 views
1

Я играю с MySQL (любопытство, самообучение), и я заметил странную вещь:MySQL CREATE TABLE сценария и имя таблицы

Я хочу, чтобы создать таблицу:

use `a`; 

CREATE TABLE `Languages` (
    `Id` int(11) NOT NULL AUTO_INCREMENT, 
    `LanguageName` char(10) NOT NULL DEFAULT '', 
    PRIMARY KEY (`Id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

, но в результате имя таблицы languages вместо Languages. Зачем ? Должен ли я что-то знать перед созданием таблицы?

+1

Да, вы должны: имена таблиц, как правило, не чувствительны к регистру в MySQL –

ответ

1

SQL нечувствителен к регистру в целом (ключевые слова и имена), поэтому верхний/нижний регистр не должен иметь значения. Так как mysql отображает таблицы в файлы (по меньшей мере, таблицы MyISAM), это делает разницу в использовании системы Linux или Windows. Имхо, вы не должны создавать имена, где дело имеет значение.

2

Проверьте системную переменную lower_case_table_names. Если эта переменная имеет значение 1, то MySQL преобразует все имена таблиц в нижний регистр для хранения. Более подробная информации об этом поведении можно найти здесь: MySQL Identifier Case Sensitivity

MySQL фактически рекомендует такое поведение как способ избежать проблем передачи данных (от дока связанного выше):

Чтобы избежать проблем передачи данных, возникающими из lettercase базы данных или имена таблиц, у вас есть два варианта:

Использовать lower_case_table_names = 1 для всех систем. Основной недостаток заключается в том, что при использовании SHOW TABLES или SHOW DATABASES вы делаете , чтобы не видеть имена в их оригинальной буквенной форме.

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

Смежные вопросы