取得した ID が長すぎるために精度が失われる問題の解決策
Node.js でインターフェイスを作成しているときに、興味深い問題に遭遇しました。
すべての料理のインターフェースを取得する
// 查询所有菜品
exports.getAllDish = (req,res)=>{
const sql = `select * from dish`
db.query(sql,(err,results)=>{
if(err) return res.cc(err)
return res.send({
status:0,
message:'获取菜品成功!',
data:results
})
})
}
操作結果:
IDに基づいてクエリディッシュを取得します
// 根据id查询菜品
exports.getDishById = (req,res)=>{
const sql = `select * from dish where id=?`
console.log(req.params.id)
db.query(sql,req.params.id,(err,results)=>{
console.log('results',results)
if(err) return res.cc(err)
if(results.length !== 1) return res.cc('获取菜品失败了噢!')
return res.send({
status:0,
message:'获取菜品成功!',
data:results[0]
})
})
実行結果:
すごいですね。先ほどはデータを取得したのに、今度はコピーしたidに基づく結果が空なのはなぜでしょうか?
データベース内のテーブルを確認しに行ったところ、
データベース内の情報が走査結果と異なっていることを確認してショックを受けました。!!
数値タイプ ID が長すぎることが判明しました。ブラウザはデータを解決し、2 の 53 乗を超えるデータの後続のコンテンツをすべて省略し、結果として ID が不一致になります。解決策:
- バックグラウンドインターフェースでフィールドタイプを設定する場合、ID のフィールドタイプを文字列タイプに変更します。
- id の長さを短いものに変更します。
問題を解く: