我有一个数据库,其中一些字段被设置为索引。我不知道这是否与问题有关,但在创建查询时我得不到任何结果。以下是我在数据库中设置的方法。该数据库有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的值存在并且存在。
我做错了什么?
答案 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()输出不匹配,请在这里发布,我会帮你弄清楚它为什么不起作用。