LoginSignup
10
7

More than 5 years have passed since last update.

Node.js+MySQLの開発で、MySQL側でBIGINTで定義していたカラムのセレクトでハマった話

Posted at

Node.jsでMySQLに接続してセレクトした時の話。

MySQL側でBIGINTで定義していたカラムから情報を取得したときに上手く変数に値が入ってくれなくてハマりました。

console.log()で調べてみると中身が'9379140374103748913'だったのが'9379140374103700000'みたいな形で途中から0になっていました。
Javascriptではnumber型という型に整数は入りますが、10の15乗桁くらいまでしか表現出来ないらしいです。それが原因でこいう現象になったのかも。

参考: データ型 (JavaScript)
参考: JavaScript 型の解説 - Wikibooks

MySQLでキャスト変換してセレクトしてくることで解決

ということで、javascirptで処理する前にキャスト変換して文字列として取得してみます。(今回の実装はそれだけで問題回避出来たので)

例えば,hoge_idのカラムがBIGINT型だったとして、

元々のセレクト文は
select user_id, hoge_id from my_table where user_id = 1;こんな感じです。

cast関数を使ってcharに変換します

select user_id, cast(hoge_id as char) from my_table where user_id = 1;

これでhoge_idの値を文字列で取得することが出来ました!

参考: MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.8 キャスト関数と演算子

カラム名をもとのものに合わせる

↑の書き方だとcast(hoge_id as char)というカラムで取得してしまうので、asでhoge_idにエイリアスを組みます。

select user_id, cast(hoge_id as char) as hoge_id from my_table where user_id = 1;

参考: カラムに別名(AS句)

なんか勉強になりました。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7