Если проблема заключается в дополнительном времени компиляции и раздувании бинарного размера, полученном путем компиляции .h как части всех используемых им .cpp-модулей, во многих случаях то, что вы можете сделать, - это сделать класс шаблона опустившимся из не-шаблонного базовый класс для не зависящих от типа частей интерфейса, и что базовый класс может иметь свою реализацию в файле .cpp.
По умолчанию идентификаторы Oracle (имена таблиц, имена столбцов и т. Д.) Нечувствительны к регистру . Вы можете сделать их чувствительными к регистру, используя кавычки вокруг них (например: SELECT * FROM "My_Table" WHERE "my_field" = 1
). Ключевые слова SQL (SELECT
, WHERE
, JOIN
и т. Д.) Всегда нечувствительны к регистру.
С другой стороны, сравнения строк чувствительны к регистру (например: WHERE field='STRING'
будет соответствовать столбцам только там, где 'STRING'
) по умолчанию. Вы можете сделать их нечувствительными к регистру, установив для NLS_COMP
и NLS_SORT
соответствующие значения (например, LINGUISTIC
и BINARY_CI
соответственно).
Примечание. При запросе представлений словаря данных (например,
dba_tables
) имена будут в верхнем регистре, если вы создали их без кавычек, и здесь будут применяться правила сравнения строк, описанные во втором абзаце.
Некоторые базы данных (Oracle, IBM DB2, PostgreSQL и т. Д.) Будут выполнять сравнение строк с учетом регистра по умолчанию, другие без учета регистра (SQL Server, MySQL, SQLite). Это ни в коем случае не стандартно, так что просто знайте, каковы ваши настройки дБ.
Oracle фактически обрабатывает имена полей и таблиц без учета регистра, если только вы не используете кавычки вокруг идентификаторов. Если вы создадите таблицу без кавычек вокруг имени, например, CREATE MyTable ..., полученное имя таблицы будет преобразовано в верхний регистр (т.е. MYTABLE) и будет обрабатываться без учета регистра. SELECT * из MYTABLE, SELECT * из MyTable, SELECT * из myTabLe будут соответствовать MYTABLE (обратите внимание на отсутствие кавычек вокруг имени таблицы). Вот хорошая статья по этому вопросу , в которой обсуждается этот вопрос более подробно и сравниваются базы данных.
Имейте в виду, что для SQL Server чувствительность к регистру основывается на сопоставлении. Параметры сортировки по умолчанию не чувствительны к регистру, но их можно изменить, чтобы они учитывали регистр. Аналогичным примером является то, почему в базах данных Oracle по умолчанию используется западноевропейский набор символов, когда UTF требуется для глобальных приложений, которые используют символы не ASCII? Я думаю, что это просто предпочтение поставщика.
Если бы мне пришлось угадывать, я бы сказал, по причинам исторической / обратной совместимости.
Oracle впервые появился в 1977 году, и, вероятно, с технологией того времени вычислительно дорого было делать дополнительную работу для поиска без учета регистра, поэтому они просто выбрали точное совпадение.
Для некоторых приложений важна чувствительность к регистру, а для других - нет. Независимо от того, какую СУБД вы используете, бизнес-требования должны определять, нужно ли вам учитывать регистр или нет. Я бы не стал слишком беспокоиться о «дефолте».