Чи чутливі назви таблиць у регістрі MySQL?


173

Чи чутливі назви таблиць у регістрі MySQL?

На моїй машині розробки Windows код, який у мене є, може запитувати мої таблиці, які, як видається, є малими літерами. Коли я розгортаю тестовий сервер у нашому центрі даних, імена таблиць починаються з великої літери.

Всі сервери, які ми використовуємо, є на Ubuntu.


Відповіді:


203

В загальному:

Назви баз даних і таблиць не відрізняються від регістру в Windows, а у більшості різновидів Unix чутливі до регістру.

У MySQL бази даних відповідають каталогам у каталозі даних. Кожна таблиця в базі даних відповідає щонайменше одному файлу в каталозі бази даних. Отже, чутливість регістру базової операційної системи відіграє важливу роль у чутливості регістру імен бази даних та таблиць.

Можна налаштувати, як імена таблиць зберігаються на диску за допомогою системної змінної lower_case_table_namesфайлі конфігурації my.cnf в розділі [mysqld]).

Прочитайте розділ: 10.2.2 Чутливість корпусу ідентифікатора для отримання додаткової інформації.


40
Це повністю спалило мене, оскільки мій код чудово працював у моєму локальному середовищі Windows, але викидав винятки, коли перейшов у виробництво на Linux !! Дякую!
portforwardpodcast

6
На цю відповідь є одне застереження, яке не згадується в документації: InnoDB не використовує назви файлів чи каталогів для баз даних та таблиць, і тому його об'єкти завжди нечутливі до регістру, навіть коли вони працюють у системі , що враховує регістр. Дивіться це запитання для прикладу того, що може піти не так через це: stackoverflow.com/questions/23182969/…
Jules

це не вся історія. дивіться відповідь Стівена Лемберта, як це можна налаштувати
Кріс Вуд

1
За замовчуванням більшість комп'ютерів Mac використовують файлову систему, нечутливу до регістру. Ви можете ввімкнути, щоб ваша файлова система не відрізнялася від регістру.
Чад

Ця чутливість до регістру імен файлів є однією з причин, через які я перейшов до Ubuntu як веб-розробник.
Мухаммед бен Юсрат

99

Назви баз даних та таблиць не відрізняються від регістру в Windows, а у більшості різновидів Unix або Linux чутливі регістри.

щоб вирішити проблему, встановіть імена нижнього_чатка_таблиці на 1

нижній_чай_таблиця_назви = 1

це зробить всі ваші таблиці невеликими літерами, незалежно від того, як ви їх пишете


1
Вони також не відрізняються від регістру на MacOS X, навіть якщо Unix лежить в основі. Імовірно, тому автозаповнення в MySQL на Mac відрізняється від регістру для імен таблиць або полів, навіть якщо запитів немає.
Девід

Так, але чи варто поставити цю заяву? Я думаю, що він знаходиться в /etc/mysql/my.cnf під групою [mysql]. Але цього недостатньо, потрібно ще щось зробити (крім звичайно перезапустити mysql ...
Alg_D

1
Це впливає лише на нові таблиці. Перш ніж змінити це налаштування, існуючі таблиці повинні бути перейменовані на малі регістри.
Мартін

19

Імена таблиць у MySQL - це записи файлової системи, тому вони нечутливі до регістру, якщо лежить в основі файлова система.


3
Я не думаю, що це завжди вірно для таблиць InnoDB.
Саймон Схід

@SimonEast Чи підкажете, будь ласка, причину, про яку ви думаєте?
Ар’я

16

Це залежить від lower_case_table_namesсистемної змінної:

show variables where Variable_name='lower_case_table_names'

Для цього є три можливі значення:

  • 0- вивіска, вказана в заяві CREATE TABLEабо CREATE DATABASEПорівняння імен залежно від регістру.
  • 1 - Назви таблиць зберігаються з малих літер на диску, а порівняння імен не відрізняються від регістру.
  • 2- букви, вказані в операторі CREATE TABLEабо CREATE DATABASE, але MySQL перетворює їх у малі регістри під час пошуку. Порівняння імен не враховує регістри.

Документація


11
  1. Знайдіть файл у /etc/mysql/my.cnf

  2. Відредагуйте файл, додавши наступні рядки:

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. бігти , mysqladmin -u root -p variables | grep tableщоб перевірити , що lower_case_table_namesце в 1даний час

Можливо, вам доведеться заново створити ці таблиці, щоб вони працювали

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.