Чутливість ідентифікаторів до регістру - HTML, CSS, JavaScript, Perl, PHP, MySQL

Чутливість ідентифікаторів до регістру

MySQL бази даних відповідають підкаталогам каталогу даних. Таблиці всередині бази даних відповідають, як мінімум, одному файлу, що знаходиться всередині підкаталогу (а можливо, і більшій кількості файлів, залежно від механізму зберігання, що застосовується). Отже, залежність від регістру імен файлів та каталогів базової операційної системи визначає залежність від регістру імен баз даних та таблиць. Це означає, що імена баз та таблиць не залежать від регістру у Windows, але залежать у більшості варіантів Unix. Одним виключенням, що заслуговує на згадку, є система Mac OS X, яка заснована на Unix, але використовує за умовчанням файлову систему (HFS+), імена в якій не залежать від регістру. Однак Mac OS X також підтримує томи UFS, в яких імена чутливі до регістру, як у будь-якій системі Unix. Див. розділ Стандарти, яким відповідає MySQLНа замітку! * Незважаючи на те, що імена баз даних та таблиць нечутливі до регістру в деяких плат- • f формах, ви не повинні звертатися до бази даних або таблиці, використовуючи різні регістри, t. в межах одного запиту. Наступний запит не буде працювати, тому що звертається до таб- ї особи та каккту_1:аЫе, і каккМУ_ТАВЬЕ: § mysql SELECT * FROM my_table WHERE MYJTABLE.col=l; Імена стовпців, індексів та псевдоніми стовпців не залежать від регістру у будь-якій платформі. Псевдоніми таблиць були чутливі до регістру до версії MySQL 4.1.1. Наступний запит не буде працювати, оскільки звертається до псевдоніму і як до а, і як до а: mysql SELECT ім'я_стовпця FROM ім'я_таблиці AS a - WHERE a.ім'я_стовпця = 1 OR к.ім'я_стовпця = 2; Якщо у вас виникають складності із запам'ятовуванням допустимих регістрів для імен баз даних татаблиць, прийміть несуперечливу угоду, наприклад, завжди створювати бази даних та таблиці з іменами в нижньому регістрі.

Як імена таблиць зберігаються на диску і використовуються MySQL - визначено системною змінною lower_case_table_names, яку можна встановити під час запуску raysqld.

Значення сенсу

  1. Імена баз даних і таблиць зберігаються на диску, використовуючи регістр, вказаний в операторі CREATE TABLE або CREATE DATABASE. При порівнянні імен регістр ураховується. Це значення за промовчанням для Unix. Слід зазначити, що у разі встановлення цього значення рівним 0 за допомогою опції -lower_case_table_names=0 в нечутливій до регістру операційній системі, і зверненні до імен таблиць MyISAM з використанням різних реєстрів стрів символів можуть пошкодження індексів.
  2. Імена таблиць зберігаються в нижньому регістрі та порівняння імен нечутливий ни до регістру.MySQLперетворює всі імена таблиць до нижнього регістру при збереженні та пошуку. Ця поведінка також відноситься до імен баз даних, починаючи з версії MySQL 4.0.2, і псевдонімів імен таблиць, починаючи з версії MySQL 4.1.1. Це значення за промовчанням у системах Windows та Mac OS X.
  3. Імена баз даних і таблиць зберігаються на диску, використовуючи регістр, вказаний в операторі CREATE TABLE або CREATE DATABASE, але MySQL перетворює їх до нижнього регістру під час пошуку. Порівняння імен нечутливі до регістру. Слід зазначити, що це працює тільки у файлових системах, імена в яких не чутливі до регістру. Імена таблиць InnoDB зберігаються в нижньому реєстрі, як при lower_case_table_names=l.

Встановлення lower_case_table_names рівним 2 можливе, починаючи зверсіїMySQL4.0.18.Якщо ви експлуатуєте MySQL тільки на одній платформі, зазвичай вам нема чого змінювати значення змінної lower_case_table_names. Однак ви можете зіткнутися з труднощами під час перенесення таблиці між платформами, які по-різному ставляться до регістру символів в іменах. Наприклад, у Unix ви можете мати дві різні таблиці з іменами my_table і my_table, тоді як у Windows ці імена розглядаються як те саме. Щоб уникнути проблем перенесення, викликаних регістром символів імен таблиць, існує два вибори: а Використовувати lower_case_table_names=l у всіх системах. Головна незручність, пов'язана з цим, полягає в тому, що коли ви використовуєте SHOW TABLES або SHOW DATABASES, то не побачите імена в їхньому регістрі.

  • Використовувати Iower_case_table_names=0 у системах Unix та Iower_case_table_names=2 у системах Windows. Це захистить регістр символів в іменах баз та таблиць. Незручність такого рішення пов'язана з необхідністю гарантування, що запити у Windows завжди звертаються до таблиць у правильному регістрі. Якщо ви переносите запити в середовище Unix, де регістр має значення, вони не працюватимуть, якщо регістр символів не той.
Слід зазначити, що перед встановленням lower_case_table_names рівним 1 в Unix ви повинні спочатку перетворити старі імена баз та таблиць до нижнього регістру перед перезапуском mysqld.