【问题标题】:Why MySQL return column name with quotes?为什么 MySQL 返回带引号的列名?
【发布时间】:2018-04-24 21:29:41
【问题描述】:

我有这个:

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

在进行查询时,我收到以下信息:

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

带有带引号的 ID 列的名称。

【问题讨论】:

  • 我从未见过 MySQL 这样做。你在什么环境下看到这个?
  • 我正在使用 MySQL 5.7.19-log,我在 Workbench 中进行查询。 link
  • 如果我把表的名字放在前面:table_name.id
  • 它们不是引号,它们是反引号!!!

标签: mysql database quotes


【解决方案1】:

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

我试图重现问题:

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 中调用该过程:

我在结果网格中的 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

【讨论】:

  • 没错就是这样。
  • 这是因为SP中的稀有字符,我不得不清理它
【解决方案2】:

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

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

'HELLO'

那些是反引号或:

`HELLO` 

MySQL 使用反引号作为列名周围的分隔符。它们不是只是在这里展示的名称的一部分。

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

 SELECT Group
 FROM   UserGroup

这将运行

SELECT `Group`
FROM   UserGroup

如果您运行如下的创建语句,您可能已将反引号作为名称的一部分:

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

    PRIMARY KEY (```log_id```)

)

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2016-12-10
    • 1970-01-01
    • 2012-02-10
    • 2019-06-22
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多