2010-01-05 2 views

ответ

59

В Unix имена таблиц чувствительны к регистру. В Windows это не так. Весело, не так ли? Собственно, как их соответствующие файловые системы. Считаете ли вы, что это совпадение?

Другими словами, если вы планируете развертывание на Linux-машине, лучше протестируйте свой SQL на базе Linux на базе Linux или будьте готовы к таинственным ошибкам «таблицы не найденные» в prod time. В наши дни ВМ дешево.

Имена полей не зависят от регистра.

EDIT: мы говорим об операционной системе на сервере MySQL машине, а не клиенту.

+1

Из документации MySQL: Хотя имена баз данных и таблиц на некоторых платформах не чувствительны к регистру, вы не должны ссылаться на заданную базу данных или таблицу, используя разные случаи в рамках одного и того же оператора.Следующий оператор не будет работать, потому что он ссылается на таблицу как my_table, так и на MY_TABLE: 'SELECT * FROM my_table WHERE MY_TABLE.col = 1;', поэтому вполне корректно, но в любом случае ее следует рассматривать как чувствительный к регистру ... –

+4

Он не основан на типе таблицы –

+11

Каждая таблица (*** независимо от того, какой движок ***) имеет соответствующий файл '.frm', который хранит структуру данных. Поскольку имена таблицы и файла совпадают, чувствительность к регистру таблиц полностью зависит от чувствительности к регистру файловой системы на сервере. – Cucu

-5

Нет, имена таблиц и строк не чувствительны к регистру, и даже инструкции SQL не являются. Итак, имена, которые вы указали в качестве примера, идентичны
Редактировать: Это зависит от сортировки сервера. Поэтому вы должны проверить настройки. Не относится к ОС.

+0

Неправильный - у Севы Алексеева есть все права. –

+0

Извините, я столкнулся с этим на собственном опыте. Получил психические шрамы, чтобы доказать. –

3

Возможно, вам необходимо найти this. В MySQL можно установить чувствительность к регистру, но это действительно проблема только при работе в нескольких средах.

+0

Да, я использовал lower_case_table_names = 1 в linux. Он работает, но только для таблиц, созданных после применения этого параметра. –

+0

Вкратце: добавьте строку 'lower_case_table_names = 1' под' [mysqld] 'в' my.cnf'. – Shautieh

11

С MySQL documentation: имена

баз данных и таблиц не чувствительны к регистру в Windows, и дело чувствительны в большинстве разновидностей Unix. Одним из примечательных исключений является Mac OS X, основанный на Unix, но использующий тип файловой системы по умолчанию (HFS +), который не чувствителен к регистру.

и

столбцы и индексы имена не чувствительны к регистру на любой платформе, ни столбцы псевдонимы.

2

Странно, это кажется чувствительным к регистру в MySQL Workbench даже в Windows.

Мы просто попытались изменить результаты оператора SELECT, но Workbench не позволил нам, жалуясь, что наш запрос не содержит первичный ключ таблицы (который он сделал, но в нижнем регистре), поэтому результат был прочитан -только. Выполнение того же запроса с использованием первичного ключа в правильном случае (ID вместо id) позволит нам редактировать результаты, как ожидалось.