也许我错过了一些非常明显的东西但是我试图从一个名为' email'带字符(50)。
我设置了一个简单的测试,我可以成功查询除此之外的所有其他列。目前,专栏名称'和密码'也是类型字符(50);
我正在复制并粘贴示例电子邮件' johnsmith@gmail.com'完全如数据库中列出的那样,我确信没有多余的空格。
这是我的名为' users':
的表格id | name | email | password
---------------------------------------------
10 | john | johnsmith@gmail.com | adsfpokasdf
我的查询是:
SELECT name FROM users WHERE email = 'johnsmith@gmail.com';
我选择的列类型有问题吗?
这是一张图片: Why is this postgresql SELECT statement returning 0 rows?
答案 0 :(得分:1)
也许我错过了一些非常明显的东西但是我试图从一个名为' email'带字符(50)。
这是你的问题。您需要类型character varying
(也称为varchar
。text
类型也可以正常工作,无需进行长度检查。 character(50)
只会保存长度为50的字符串,并会用空格填充它以填充它。
重新创建列类型为varchar(50)
或text
的表格,然后重试。它应该更接近期望。
答案 1 :(得分:0)
我必须从
更改where子句SELECT "fieldId" FROM MyTable WHERE 'fieldId' = 'stringid'
到
SELECT "fieldId" FROM MyTable WHERE "fieldId" = 'stringid'
基本上,where子句中的单引号要加倍。我不确定为什么要引用它,但是在某些postgres实例中,我不得不这样做。
希望这对其他人有帮助:)
答案 2 :(得分:-2)
也许'@'用于PostgreSQL中的模式匹配?如果是这样,它可能需要在它之前的转义字符......
TRY:
SELECT name FROM users WHERE email = 'johnsmith\@gmail.com';
还可以尝试(来自THIS帖子):
SELECT name FROM users WHERE email = E'johnsmith@gmail.com';
最后:
SELECT name FROM users WHERE email = E'johnsmith\@gmail.com';