Могу ли я принудительно настроить чувствительность к регистру имени таблицы MySql в файловых системах, которые не чувствительны к регистру?

Итак, наша целевая среда - linux, поэтому в MySQL по умолчанию учитывается регистр. Я знаю, что мы можем сделать нашу среду linux нечувствительной к регистру с помощью переменной lower_case_table_names, но мы бы этого не сделали. Мы несколько раз сталкивались с несоответствием регистра, потому что наши установки для разработчиков - это OSX, а mysql там не чувствителен к регистру.

Есть ли способ заставить имена таблиц быть чувствительными к регистру при моей установке MySql на OSX (5.0.83, если это имеет значение), чтобы мы отлавливали несоответствие регистра имени таблицы до развертывания на серверах интеграции, работающих на Linux?


person Brian Deacon    schedule 28.04.2010    source источник
comment
Комментирую, чтобы подписаться. за meta.stackexchange.com/questions/45360/   -  person greggles    schedule 26.04.2019


Ответы (2)


Установите lower_case_table_names=0 в my.cnf.

Если вы устанавливали через homebrew, файл находится здесь: /usr/local/Cellar/mysql/<version>/my.cnf

Запросы с таблицами теперь должны быть чувствительны к регистру: mysql> select count(*) from user; ERROR 1146 (42S02): Table 'xxx.user' doesn't exist mysql> select count(*) from User; +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec)

person shadanan    schedule 11.07.2015
comment
Кажется, что это должно работать, но для меня это не так с [email protected] и MacOS Mojave 10.14.4. - person greggles; 25.04.2019

Лучше всего исправить имена таблиц, чтобы не было конфликтов. Дифференцировать исключительно по регистру - плохая идея и приводит к путанице (как вы, вероятно, знаете).

Но попробуйте использовать одинарные кавычки вокруг имен таблиц во время создания. Это работает в SUSE / Linux / MySQL 5.0 с браузером запросов, работающим в Windows.

CREATE TABLE  `MySchema`.`test` (
  `COMMENT` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE  `MySchema`.`Test` (
  `COMMENT` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into MySchema.test values ('this is table test' );
insert into MySchema.Test values ('this is table Test' );


select * from MySchema.test;
select * from MySchema.Test;

Вы хотите, чтобы он потерпел неудачу, если клиент, не чувствительный к регистру, запрашивает таблицу с неправильным регистром? Я считаю, что он должен потерпеть неудачу, если база данных MySQL работает в Linux.

Просмотрите эту ссылку "Одно примечательное исключение: Mac OS X, основанная на Unix, но использующая тип файловой системы по умолчанию (HFS +), не чувствительный к регистру. Однако Mac OS X также поддерживает тома UFS, которые чувствительны к регистру, как и в любом Unix ».

person MonkeyWrench    schedule 08.02.2011
comment
Имена наших таблиц не конфликтуют. Но иногда у нас есть код, который неправильно заглавными буквами называет имена таблиц, а нечувствительность к регистру файловой системы OS X по умолчанию означает, что мы не видим ошибки, пока не развернем ее в Linux. - person Brian Deacon; 15.02.2011