2009-04-22 12 views

Respuesta

30

No puede usar el punto en el nombre de una base de datos. Además, evitaría usarlo en cualquier identificador. Una convención común es usar guión bajo en su lugar. Tendrá el mismo propósito y evitará MUCHA confusión. Si tiene tiene una buena razón para usar caracteres extraños y de otra manera ilegales en una tabla o nombre de campo, entonces tiene que escapar.

para escapar de identificadores en MySQL, utilice el acento grave:

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

entrar en el hábito de backticking todos los nombres de campo, independientemente de si necesidad que es una buena práctica en mi opinión, pero eso es otra historia .

+3

No estoy muy de acuerdo con que el tic back sea una buena práctica. MySQL específico. No lo hagas a menos que tengas que hacerlo. Los nombres de las columnas deben ser (imho) puros^[a-z0-9 _] + $, y no entrar en conflicto con las palabras reservadas.El equivalente de postgres es "Nombre de columna extraña" (que conserva mayúsculas y minúsculas, espacios, permite palabras reservadas, etc.). – tommym

+2

@ user37607, alguna información sobre por qué regatear es una mala práctica sería genial! – Sam

+2

@Sam, como dijo, es específico de MySQL, lo que significa que si necesita cambiar a un proveedor de base de datos diferente, debe actualizar todo su SQL. Puede cambiar el carácter de escape de MySQL para que sea una sintaxis compatible con ANSI utilizando el indicador ANSI_QUOTES: http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_ansi_quotes – nickf

3

MySQL 5.0.22 no parece permitir que:

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

Incluso si se lo permitían, yo recomendaría fuertemente contra él.

Por lo menos tendrías que escapar de cualquier referencia a esa base de datos con marcadores en cada consulta que alguna vez la use.

+1

Sí, no, incluso si puede. Lo mismo ocurre con los nombres de tablas con espacios en blanco o unicode o mayúsculas y minúsculas. Solo estás pidiendo problemas de esa manera. – Thilo

7

Antes de MySQL 5.1.6, bases de datos y nombres de tablas no pueden contener /, \, . o caracteres que no están permitidos en los nombres de archivo (ver 8.2. Schema Object Names). En las versiones posteriores a la 5.1.6 debe citar su nombre de tabla con un backtick (`), pero como otros también lo recomendaron: no debe hacer esto para evitar problemas innecesarios.

22

Puede usar . en los nombres de MySQL 5.1.6 according to the documentation.

Sin embargo, como se ha dicho y se volverá a decir, por favor no lo hagas. Por cada problema que creas que estás resolviendo, crearás cinco que te morderán más adelante. Ya que . se usa para calificar nombres, p. database.table o table.column tendrá que citar el nombre de base de datos cada vez que lo utilice *

Usted puede hacer esto con acentos abiertos:.

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

o el uso de comillas dobles si se establece la opción siguiente:

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

* no es estrictamente cierto - hay que citar a cualquier carácter que no sea alfanumérico o _ o $, pero. es una opción particularmente problemática para tener en sus nombres.

+1

+1 para 'do.not.do.this' y 'asking.for.problems' ... simplemente hermoso. –

+0

@RichardMorgan Usando "." en un nombre de tabla: "cada vez que lo haces, Dios mata a un cachorro". – user3791372

Cuestiones relacionadas