为什么MySQL总是不返回此查询的数据?

时间:2009-09-17 19:07:21

标签: sql mysql

我有一个数据库,其中一些字段被设置为索引。我不知道这是否与问题有关,但在创建查询时我得不到任何结果。以下是我在数据库中设置的方法。该数据库有90,000条记录,此表设置如下:

| fieldA  | fieldB | fieldC  | fieldD |

fieldA = index - CHAR
fieldB = index - CHAR
fieldC = index - CHAR
fieldD = index - VARCHAR

如果我这样做:

SELECT * 
  FROM tableA 
 WHERE 'fieldD'='A LONG STRING WITH SYMBOLS AND CHARCTERS';

我得到0结果,我知道fieldD的值存在并且存在。

我做错了什么?

7 个答案:

答案 0 :(得分:5)

在我看来,问题是你用单引号括起你的列名。这导致MySQL将其视为字符串而不是列名,因此您将字符串'fieldA'与长字符串进行比较。删除列名称周围的引号,你应该好好去。

SELECT * FROM tableA WHERE fieldD='A LONG STRING WITH SYMBOLS AND CHARCTERS';

答案 1 :(得分:1)

在字段名称周围丢弃撇号,你可以使用它们但是字段名称周围的撇号是相反的=“'”

SELECT * FROM tableA WHERE fieldD='A LONG STRING WITH SYMBOLS AND CHARCTERS'

答案 2 :(得分:1)

此处可能存在字符编码问题。我会尝试这个查询,看看会发生什么: 选择 *   来自tableA  在哪里'fieldD'喜欢'%A长串带符号和字符%';

另外,我注意到'CHARACTERS'这个词的拼写错误。

答案 3 :(得分:0)

不确定这是否是您上述查询中的拼写错误,但fieldD不应该是单引号。

答案 4 :(得分:0)

BACKTICKS而不是单引号

SELECT * FROM tableA WHERE `fieldD`='A LONG STRING WITH SYMBOLS AND CHARCTERS';

反引号键位于1键的左侧

答案 5 :(得分:0)

我不知道为什么但是下面的查询就行了。如果您有任何人可以解释为什么会受到赞赏:

SELECT * 来自tableA 在哪里完美(LIKE) '1008017 P MT / 75 FRONT 52H%' ) 限制0,30

我必须在字符串末尾放置一个%'才能工作

答案 6 :(得分:0)

该列没有您认为的数据。试试这个:

首先运行此查询:

select hex('100/80R16 M A39 50S')

然后运行此查询:

select fieldD, hex(fieldD) from tableA

然后将第一个查询的结果与第二个查询中的相应行进行比较。我想你会发现hex()表示不匹配。

如果你不能告诉为什么它们与hex()输出不匹配,请在这里发布,我会帮你弄清楚它为什么不起作用。