首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么将varchar与数值进行比较总是返回True?

为什么将varchar与数值进行比较总是返回True?
EN

Stack Overflow用户
提问于 2017-07-04 15:04:01
回答 1查看 60关注 0票数 0

我在MySQL (MySQL Server5.7)中得到了下表:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS SIMCards (
SIMCardID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
ICCID VARCHAR(50) UNIQUE NOT NULL,
MSISDN BIGINT UNSIGNED UNIQUE);

INSERT INTO SIMCards (ICCID, MSISDN) VALUES
(89441000154687982548, 905511528749),
(89441000154687982549, 905511528744),
(89441000154687982547, 905511528745);

然后运行以下查询:

代码语言:javascript
复制
SELECT SIMCardID FROM SIMCards WHERE ICCID = 89441000154687982549;

但是,它不只是返回相关的行,而是返回所有的行。如果我用引号包围ICCID,它工作得很好,例如:

代码语言:javascript
复制
SELECT SIMCardID FROM SIMCards WHERE ICCID = '89441000154687982549';

为什么第一个SELECT查询不像我预期的那样工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 15:08:58

MySQL中的整数的最大值(无符号)为4294967295。您的ID大大超过了这个数字。因此,如果您按整数从数据库中选择*,则您的行为将没有定义,因为您选择的数字不能用整数表示。

我不清楚为什么要得到所得到的结果,但我确实知道,当数据不能用整数表示时,尝试用整数进行选择肯定是行不通的。

编辑以添加详细信息--我忘记了:即使是MySQL中的bigint也不足以表示您的ID。所以你需要确保并且总是使用字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44909279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档