2009-04-22 1 views

ответ

30

Вы не можете использовать точку в имени базы данных. Кроме того, я бы избегал использовать его в любом идентификаторе. Общим соглашением является использование подчеркивания вместо этого. Он будет служить той же цели и позволит избежать путаницы. Если у вас есть do, у вас есть веская причина для использования странных и нелегальных символов в имени таблицы или поля, тогда вам нужно ее избежать.

избежать идентификаторов в MySQL, используйте обратные одиночные кавычки:

SELECT `select`, `some.field name`, `crazy()naming+here` 
FROM `my-=+table` 

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

+3

Я категорически не согласен с тем, что тиканье в обратном направлении является хорошей практикой. Специфика MySQL. Не делай этого, если только не придется. Имена столбцов должны (imho) быть чистыми^[a-z0-9 _] + $, а не столкнуться с зарезервированными словами.Экземпляром postgres является «Weird Column Name» (который сохраняет регистр, пробелы, позволяет зарезервировать слова и т. Д.). – tommym

+2

@ user37607, некоторая информация, почему backticking - плохая практика, было бы здорово! – Sam

+2

@Sam, как он сказал, специфичен для MySQL, а это значит, что если вам нужно переключиться на другого поставщика базы данных, вам нужно обновить весь ваш SQL. Вы можете изменить символ escape-кода MySQL, чтобы он соответствовал ANSI-синтаксису, используя флаг ANSI_QUOTES: http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_ansi_quotes – nickf

3

MySQL 5.0.22 не появляется, чтобы его:

% mysqladmin -uroot -pXXX create foo.bar 
mysqladmin: CREATE DATABASE failed; error: 'Incorrect database name 'foo.bar'' 

Даже если он позволил, я бы настоятельно рекомендовал против него.

По крайней мере, вам придется избегать ссылки на эту базу данных с обратными окнами в каждом запросе, который когда-либо ее использует.

+1

Да, не делайте этого, даже если можете. То же самое относится к именам таблиц с пробелом или юникодом или чувствительностью к регистру. Вы просто просите о неприятностях таким образом. – Thilo

7

До MySQL 5.1.6, имена баз данных и таблиц не может содержать /, \, ., или символы, которые не разрешены в именах файлов (см 8.2. Schema Object Names). В версиях после 5.1.6 вы должны указывать свое имя таблицы с обратным адресом (`), но, как и другие, также рекомендуется: вы не должны этого делать, чтобы предотвратить ненужные проблемы.

22

Вы можете использовать . в именах MySQL 5.1.6 according to the documentation.

Однако, как было сказано и будет сказано снова, , пожалуйста, не делайте этого. Для каждой проблемы, которую, как вы думаете, сейчас решаете, вы будете создавать пять, которые вас укусят позже. Поскольку . используется для определения имен - например, database.table или table.column вам придется процитировать ваше имя базы данных каждый раз, когда вы используете его *

Вы можете сделать это с обратными кавычками:.

CREATE TABLE `do.not.do.this` (col INT); 

или используя двойные кавычки, если вы установили следующие опции:

SET sql_mode='ANSI_QUOTES'; 
CREATE TABLE "asking.for.problems" (col INT); 

* не совсем верно - вы должны процитировать любой символ, который не алфавитно-цифровой или _ или $, но. особенно неприятный вариант в ваших именах.

+1

+1 для «do.not.do.this» и «ask.for.problems» ... просто красиво. –

+0

@RichardMorgan Использование "." в имени таблицы: «каждый раз, когда вы это делаете, Бог убивает щенка». – user3791372

Смежные вопросы