Skip to content

Instantly share code, notes, and snippets.

@libitte
Last active September 29, 2022 05:49
Show Gist options
  • Select an option

  • Save libitte/7efa911d55512930dc80 to your computer and use it in GitHub Desktop.

Select an option

Save libitte/7efa911d55512930dc80 to your computer and use it in GitHub Desktop.
mysql int(11) の意味するところ
MySQLがサポートするその他の拡張として、各タイプの基本キーワードに続くカッコ内に整数データタイプの表示幅を指定するオプションがあります(例 INT(4))。この表示幅オプションは、カラムに指定された幅よりも小さい幅の整数値を表示する際に左側をスペースで埋めるために使用されます。
この表示幅は、カラムに格納する事ができる値の範囲も、カラムに指定された幅を超える値の表示される桁数も制限しません。例えば、SMALLINT(3) として指定されたカラムは、通常の -32768 から 32767 の SMALLINT 範囲を持ち、そして、3文字で許容された範囲外の値は3文字以上の文字を使って表示されます。
オプションの拡張属性 ZEROFILL が続いて指定された時は、デフォルトはスペースである埋め込み文字はゼロで置き換えられます。例えば、INT(5) ZEROFILL として宣言されたカラムには、4 の値は 00004 として表示されます。もし整数カラムの中に表示幅よりも大きい値を格納すると、MySQLが複雑なJOINに対してテンポラリテーブルを生成した時に問題が発生するという事に注意してください。これはMySQLは、データは元のカラム幅に収まると仮定するからです。
http://dev.mysql.com/doc/refman/5.1/ja/numeric-types.html
そもそもMySQLのint(11)というのは、numeric(11)のように桁数を指定するオプションではなく、標準SQLなどには存在しない、「勝手構文(方言)」です。
その意味は、「()内で指定した桁数に満たない場合は左側に空白を埋める」です。
int(11)を指定して、値が「2147483647」なら結果は「_2147483647」(_は空白)となりますし、「123」なら「________123」となりますし、「-1234567890」なら「-1234567890」となります。
しかしint(10)を指定した場合、-1000000000を下回る数字のときだけ11桁の文字列、それ以外は10桁の文字列となり、ずれが発生してしまいます。
MySQL的に、という話であれば、極端な話、int(100)でも問題ありません。
単に先頭に大量の空白がつくだけです。
逆にint(1)でも問題はありません。
単に前方空白による桁あわせが行われないだけです。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment