首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL SELECT不检查值是否准确

问MySQL SELECT不检查值是否准确
EN

Stack Overflow用户
提问于 2022-02-21 23:01:29
回答 1查看 36关注 0票数 0

目前,我正在使用JS、DiscordJS和MySQL,并试图从表中获取一些数据,这些数据通常正常工作。但我很难使用MySQL SELECT查询,因为它不检查表中的值是否与正在搜索的值完全相同。与它正在寻找的那个不和谐的ID结束是不同的。

代码:

代码语言:javascript
复制
let query = `SELECT * FROM accounts WHERE DiscordID = ${interaction.member.id}`;
console.log(`QUERY: ` + query);
MySQL.Connect()
    .then((connection) => {
        MySQL.Query(connection, query)
            .then((results) => {
                if (results == '') {
                    console.log('[RESULTS = 0]');
                    console.log(results);
                } else {
                    console.log('[RESULTS > 0]');
                    console.log(results);
                }
            })
            .catch((error) => {
                console.log(error);
            })
            .finally(() => {
                connection.end();
            });
    })
    .catch((error) => {
        console.log(error);
    });

结果:

代码语言:javascript
复制
QUERY: SELECT * FROM accounts WHERE DiscordID = 466934561738326016

RESULT: 
ID: 1,
Username: 'Test',
Password: 'Test',
DiscordID: '466934561738326022'

MySQL模式:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `accounts` (
`ID` INT NOT NULL AUTO_INCREMENT, 
`Username` VARCHAR(255) NOT NULL, 
`Password` VARCHAR(255) NOT NULL, 
`DiscordID` VARCHAR(100) NOT NULL, 
PRIMARY KEY (`ID`));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 00:06:44

你被MySQL的数字处理咬了。

你说过,

代码语言:javascript
复制
SELECT * FROM accounts WHERE DiscordID = 466934561738326016

MySQL使用了这个长数字,并悄悄地将其转换为IEEE 754 64位浮点数,从而失去了精度。做SELECT 466934561738326016;会给你带来466934561738326000。这有时与错误的DiscordID相匹配。!!

如果您在ID周围放置引号,而不是这样做,MySQL将ID值保留为文本字符串。它起作用了。

代码语言:javascript
复制
SELECT * FROM accounts WHERE DiscordID = '466934561738326016'

看看这里。小提琴

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

https://stackoverflow.com/questions/71214018

复制
相关文章

相似问题

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