MySQL INT型の落とし穴

php・MySQL・Web開発

先ほどMySQLのテーブルにINT型のカラムを設定し、そこに10ケタの数字リストをスクリプトを使ってどんどん入れる作業をしていました。
そのカラムにはユニーク制約をつけていて、数字リストは全て異なる10ケタの数字。

ところが、INSERTしていくとduplicationエラーが出まくる。しかもそのエラーで表示される数字は、前述のリストには含まれていない数字。それが何回も登場して、duplicationエラーを引き起こしている。何この数字? なぜ何回も勝手に出て来る?

リスト内の数字は間違いなく重複無しで10ケタの数字である。
なのに何故!?

ググったら解決した。

【参考】これだけは覚えておきたい!!MySQL の6つの自動変換 – sakaikの日々雑感~(T)編

要するにMySQLにおいてINT型は最大21億ちょっとの数字を入れられるカラム(unsignedの場合は43億弱)。

私はINT型を「10ケタの数字が入れられる」ものだと誤解していました。
正しくは「INT型=21億ちょっとまでの数字」

冒頭に挙げたリストの中には「90億」とかの数字もあったため、前述のようなエラーになったのでした。これは気付くのに時間がかかりました。

コメント

タイトルとURLをコピーしました