提问人:TheDivine 提问时间:2/22/2022 最后编辑:O. JonesTheDivine 更新时间:2/22/2022 访问量:40
MySQL SELECT 不检查值是否精确 [duplicate]
MySQL SELECT doesn't checks if the value is exact [duplicate]
问:
我目前正在使用 JS、DiscordJS 和 MySQL,并试图从表中获取一些数据,这些数据通常总是可以正常工作。但是我正在为MySQL SELECT查询而苦苦挣扎,因为它不会检查表中的值是否与搜索的值相同。Discord ID 的末尾与它正在搜索的末尾不同。
法典:
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);
});
结果:
QUERY: SELECT * FROM accounts WHERE DiscordID = 466934561738326016
RESULT:
ID: 1,
Username: 'Test',
Password: 'Test',
DiscordID: '466934561738326022'
MySQL架构:
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`));
答:
0赞
O. Jones
2/22/2022
#1
你被MySQL对数字的处理咬住了。
你说,
SELECT * FROM accounts WHERE DiscordID = 466934561738326016
MySQL采用了这个长数字,并将其静默地转换为IEEE 754 64位浮点数,从而失去了精度。做得到你.有时,这与错误的 DiscordID 匹配。!!SELECT 466934561738326016;
466934561738326000
如果将 ID 括起来,则这样做,MySQL 会将 ID 值保留为文本字符串。它有效。
SELECT * FROM accounts WHERE DiscordID = '466934561738326016'
在这里查看。小提琴
评论
SELECT * FROM accounts WHERE DiscordID = "${interaction.member.id}";