0

我遇到了这个奇怪的问题,我可以将电子邮件“test@gmail.com”存储到我的数据库中,它是 varchar() 或 text(),但我无法根据电子邮件选择行。如果我通过另一个标识符(例如,名为“email_id”的主键)选择列,那么我可以显示带有句点的电子邮件。我还可以选择任何带有电子邮件列的行,其中包含没有句点的 varchar / 文本,例如“test@gmailcom”。

我已经在测试数据库和我的舞台数据库上复制了这个。这也不是代码问题,因为我在从查询面板直接插入数据库时​​已经测试并复制了这一点。

我试过用谷歌搜索它,但也无济于事。

编辑:

我是否正确使用了 varchar() 和/或 text() ?应该是别的吗?我看过一些 SO 帖子(找不到它们)说要使用 VarChar。

作为记录,我正在使用 mysql WorkBench 进行插入/选择,如果这有什么不同的话。

编辑2:

这里有两条记录:

client_id (PK, AI, INT, UNSIGNED), email (varchar(500), not null) 

的表中client_login

client_id = 1, email = 'test@gmail.com' 

client_id = 2, email = 'test@gmailcom'

以下选择

select * from client_login where email='test@gmail.com'

返回 0 行

select * from client_login where email='test@gmailcom'

返回 1 行

编辑 3:

我也可以

select * from client_login where client_id=1

它会向我显示 所在的行email = 'test@gmail.com',这很奇怪,因为就好像句号在行中,但实际上不是句号...

4

2 回答 2

2

坦率地说,我不相信问题是如上所述。

这是您在 SQLFiddle 中运行的“问题” ,表明它运行良好。

我认为电子邮件栏中的数据不是你想象的那样,尤其是“点”字符。
尝试使用手动输入的数据对其进行更新。


HEX()为了帮助调试此问题,请尝试使用以下函数将列值输出为十六进制:

select HEX(email)

并仔细检查输出。

于 2012-11-28T01:36:57.000 回答
0

尝试更改服务器的SQL模式

http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

于 2012-11-28T00:31:55.597 回答