devroom.io/content/posts/2009-08-20-once-and-for-all-rails-migrations-integer-limit-option.md
2013-03-24 22:28:43 +01:00

64 lines
1.1 KiB
Markdown

---
title: "Once and for all: Rails migrations integer :limit option"
kind: article
slug: once-and-for-all-rails-migrations-integer-limit-option
created_at: 2009-08-20
tags:
- MySQL
- Ruby on Rails
- Rails
- sql
- migrations
- integer
- limit
---
I literally always have to look up the meaning of :limit in migrations when it comes to integer values. Here's an overview. Now let's memorise it (oh, this works for MySQL, other databases may work differently):
<!--more-->
<table>
<tr>
<th>:limit</th>
<th>Numeric Type</th>
<th>Column Size</th>
<th>Max value</th>
<tr>
<tr>
<td>1</td>
<td>tinyint</td>
<td>1 byte</td>
<td>127</td>
</tr>
<tr>
<td>2</td>
<td>smallint</td>
<td>2 bytes</td>
<td>32767</td>
</tr>
<tr>
<td>3</td>
<td>mediumint</td>
<td>3 byte</td>
<td>8388607</td>
</tr>
<tr>
<td>nil, 4, 11</td>
<td>int(11)</td>
<td>4 byte</td>
<td>2147483647</td>
</tr>
<tr>
<td>5..8</td>
<td>bigint</td>
<td>8 byte</td>
<td>9223372036854775807</td>
</tr>
</table>
<em>Note: by default MySQL uses signed integers and Rails has no way (that I know of) to change this behaviour. Subsequently, the max. values noted are for signed integers.</em>