2010-07-02 16 views
21

Tengo una tabla en una tabla MySQL con un nombre de campo 'producto', y quiero cambiarle el nombre a 'ds-product'.¿Puede un campo de tabla contener un guión?

El sistema de tipo CMS que estoy utilizando utiliza el id de formfields como el nombre del campo de tabla para insertar.

Para la mayoría esto funciona bien, pero para un campo en particular, antepone "ds-" a cualquier identificación que le dé, así que debo hacer coincidir el nombre del campo de la tabla.

Sin embargo, cuando se trata de hacer una consulta me sale el error que

columna Desconocida 'sales.ds' en 'lista de campos'

¿Hay alguna manera de que pueda tener un campo llamado DS-producto ?

+9

Es posible, pero no desea hacer esto porque deberá encerrar el nombre de la tabla en el carácter de comillas adecuado para su base de datos * cada vez *. ¿Has considerado utilizar un guión bajo en su lugar? – Charles

+0

@Charles: su comentario debería haber sido una respuesta –

+0

@Charles: +1, los nombres de columna no estándar deberían ser un último recurso por el motivo que acaba de indicar. –

Respuesta

30

Sí, puede utilizar puntuacion, espacio en blanco, caracteres internacionales, y las palabras reservadas de SQL si utiliza identificadores delimitados :

SELECT * FROM `my-table`; 

En MySQL, utilice las copias de las garrapatas. En SQL estándar, use comillas dobles.

O si utiliza MySQL se puede establecer el ANSI_QUOTES SQL mode:

SET SQL_MODE = ANSI_QUOTES; 
SELECT * FROM "my-table"; 
+0

No tengo acceso a la consulta que se usa. ¿Hay alguna manera de tener un campo llamado ds-product y hacer que se use en una consulta estándar? – Jacob

+4

No, el guión es un operador, y no puede usarlo en el medio de un identificador. ¿Qué pasa si también tiene columnas 'ds' y' product'? Entonces 'ds-product' sería una expresión aritmética: una columna menos la otra columna. SQL admite identificadores delimitados para que pueda resolver esta ambigüedad. FWIW, ¡no conozco ningún otro lenguaje de programación que permita esto en absoluto! –

+0

Sí, gracias factura. – Jacob

4

trate de poner entre paréntesis en la última parte de su llamada en la mesa. en su caso:

SELECT * FROM [TABLE-NAME]; 

solo asegúrese de poner los corchetes solo en el nombre de la tabla. no en la base de datos completa se encuentra

SELECT * FROM some_database.anotherdatabase.[your-table]; 

P.S. trabaja en columnas, también.

Estoy usando Microsoft SQL Server Management.

+2

Por desgracia, MS SQL y MySQL son diferentes, y a menudo requieren diferentes respuestas. No puedes mezclarlos. Recomiendo eliminar esta respuesta antes de obtener un montón de votos abajo. –

Cuestiones relacionadas