为什么MySQL使用引号返回列名?

时间:2017-11-11 22:13:00

标签: mysql database quotes

我有这个:

...
SELECT 
    `id`, 
    `name`, 
    `user_id`, 
    `xml_tables`
...

在进行查询时,我回忆一下:

+- ----+------+---------+------------+
| `id` | name | user_id | xml_tables |
+------+------+---------+------------+
|    1 | name |       1 |        xml |
+------+------+---------+------------+

带有引号的ID列的名称。

2 个答案:

答案 0 :(得分:2)

我看到你正在调用存储过程。但是你没有在你的程序中显示代码。

我试图重新创建问题:

mysql> create procedure sp_read_database(in i int)
    -> begin
    -> select 123 as `id`, 'name' as `name`, 456 as `user_id`, 'xml tables' as `xml_tables`;
    -> end

然后调用MySQL Workbench 6.3.9中的过程:

enter image description here

我在结果网格中的id列周围看不到任何反向标记。

我怀疑您的程序包含一些错误的代码格式。如果我在id的列别名中添加文字后退标记,我可以重现您的结果:

mysql> create procedure sp_read_database(in i int)
    -> begin
    -> select 123 as ```id```, 'name' as `name`, 456 as `user_id`, 'xml tables' as `xml_tables`;
    -> end

enter image description here

答案 1 :(得分:1)

这些不是您要查找的报价。

这些是单引号,它们看起来像这样:

'HELLO'

这些是反击或:

`HELLO` 

MySQL使用反引号作为列名称的分隔符。它们不是此处显示的名称的一部分。

当您使用GROUP等保留字作为列名时,这会有所帮助。 这将失败:

 SELECT Group
 FROM   UserGroup

这将运行

SELECT `Group`
FROM   UserGroup

如果您运行如下所示的create语句,则可能已将反引号包含在名称中:

CREATE TABLE `log` 
(
    ```log_id``` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `log_text` LONGTEXT NULL,

    PRIMARY KEY (```log_id```)

)