LoginSignup
2
1

More than 1 year has passed since last update.

decimal と int の違いってなんや?

Last updated at Posted at 2023-01-30

目次

  1. はじめに
  2. 結論
  3. データ型種類一覧
  4. integer と bigint の違い
  5. decimal と numeric の違い
  6. 参考URL

はじめに

Rails の開発でテーブル作成時に decimal と int を使い分けている PR を見かけたので、dicimal と int の違いについて調べてみました。
間違いあったらご指摘ください 🙇

結論

decimal は固定長整数型, integer は整数型(4 バイト)
decimal は、全体の桁数-精度(precision)と小数点以下の桁数(scale)を指定された浮動小数点データに対し、
integer は、整数だ!!!!

データ型種類一覧

データ型 種類
primary_key プライマリーキー
string 文字列型
text テキスト型
integer 整数型(4バイト)
bigint 整数型(8バイト)
float 浮動小数点数
decimal 固定長整数型
numeric 数値型
datetime 日付と時刻(1000-01-01 00:00:00.000000から9999-12-31 23:59:59.999999)
time 時刻 (-838:59:59から838:59:59)
date 日付(1000-01-01から9999-12-31)
binary バイナリ文字列型
blob Blob
boolean 真偽値型

Rails ドキュメントを参照しました。

integer と bigint の違い

integer:整数型(4 バイト)
bigint:整数型(8 バイト)

bigint は integer よりも大きい整数を扱うことができます。
Rails5.1 からは id カラムのデフォルトが bigint に変更になるようになりました。
id カラムが integer だと 4 バイトで 2,147,483,647 まで扱えるのに対し、
bigint が 8 バイトで 9,223,372,036,854,775,807 まで扱えるようになります。
これにより、より多くのレコードを扱えるようになります。
Pull Request はこちら
記事はこちら

decimal と numeric の違い

decimal:固定長整数型
numeric:数値型

Railsでは、decimalとnumericはどちらも10進数を格納するために使用されますが、許容される精度のレベルが異なります。
decimalは浮動小数点データ型で、小数点以下の桁数を固定で格納します。例えば、decimal(5, 2)と定義されたカラムには、最大5桁、小数点以下2桁の数字が格納されます。
この時の第一引数は、全体の桁数-精度(precision)を表し、第二引数は、小数点以下の桁数(scale)を表します。
numeric は decimal と似ていますが、SQL における decimal 型のエイリアスです。また、Railsでも同じ動作になります。
一般に、Railsではnumericよりもdecimalが好まれます。大きな数値に対するパフォーマンスが良く、格納される小数点以下の桁数が一貫して予測可能であるためです。
また、decimal は地図の緯度経度など、小数点以下の桁数が固定されている数値を格納する際などで使用されます。

まとめ

  • decimal は固定長整数型, numeric は数値型, integer は整数型(4 バイト), bigint は整数型(8 バイト)
  • はっきりとした、違いや使用例までは調べられなかったが、それぞれの特性を掴むことができたので、実際の開発で経験しながら、都度適切な型は何かを考えていきたい

参考記事

こちらは MySQL の話ですが、一応共有しておきます。

2
1
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
2
1