3

我的 MySQL 查询有问题。我有一个表,其中包含“读取”列之一,其中默认值为“1”,并且由 phpmyadmin 而不是 bool 自动设置为 tinyint(1)。

当我执行查询时:

SELECT * FROM book WHERE read = '1'

它给出了一个错误。

但是当我执行这个查询时:

SELECT * FROM book WHERE id = '77'

没事。除了可能无法以这种方式搜索 tinyint 之外,我没有看到任何问题。有人可以帮忙吗?我浏览了谷歌,但没有找到答案。

4

3 回答 3

4

READ是保留字。它必须用反引号转义,

SELECT * FROM book WHERE `read` = 1

更新 1

另一种选择是供应ALIAS,例如

SELECT * FROM book a WHERE a.read = 1
于 2013-01-11T05:35:25.747 回答
4

您不能直接使用MySQL 保留字作为列名。READ是 MySQL 保留字,如果您仍想使用READ作为列名,则在列名前后使用`(反引号)符号。

SELECT * FROM book WHERE `read` = 1;
于 2013-01-11T05:41:32.503 回答
3

只需删除引号

因为它是 tinyint,所以您不应该使用引号(将它们用于字符串、字符或日期)

select * from `table_name` where `read`=1;

如果它不起作用,那么您可以按照 Ilion 的说明进行铸造(这很好)

于 2013-01-11T05:47:51.627 回答