# Migration - wrong SQL statement is created

**URL:** <https://www.ruby-forum.com/t/migration-wrong-sql-statement-is-created/174691>\
**Category:** Rails\
**Created:** [August 31, 2009, 3:07pm UTC](https://www.ruby-forum.com/t/migration-wrong-sql-statement-is-created/174691 "2009-08-31T15:07:11Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![heyho](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@heyho](https://www.ruby-forum.com/u/heyho)\
**Post date:** [August 31, 2009, 3:07pm UTC](https://www.ruby-forum.com/t/migration-wrong-sql-statement-is-created/174691/1 "2009-08-31T15:07:11Z")

</div>

Hi,

I am doing my first steps with RoR and I have the following problem:

I execute my migration file with the following content on a  
MySQL-database via Rake:

`
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.integer :id
      t.string :username, :size => 100
      t.string :password, :size => 100
      t.string :email, :size => 100
```
  t.timestamps
end

```
end
def self.down
drop_table :users
end
end
`

I get the following error message by Rake:

`
>rake db:migrate
    (in D:/InstantRails/rails_apps/EHA)
    == 1 CreateUsers: migrating
===================================================rake aborted!
    -- create_table(:users)
```
Mysql::Error: #42000You have an error in your SQL syntax; check the

```
manual that corresponds to your MySQL server version for the right
syntax to use near ‘(11), username varchar(255) DEFAULT NULL,
password varchar(255) DEFAULT NULL’ at line 1: CREATE TABLE users
(id int(11) DEFAULT NULL auto_increment PRIMARY KEY(11), username
varchar(255) DEFAULT NULL, password varchar(255) DEFAULT NULL, email
varchar(255) DEFAULT NULL, created_at datetime DEFAULT NULL,
updated_at datetime DEFAULT NULL) ENGINE=InnoDB
```
(See full trace by running task with --trace)

```

`

The problem is  
`
id int(11) DEFAULT NULL auto_increment PRIMARY KEY(11),
`

- behind “PRIMARY KEY” there is a length defined again. If I execute the  
statement without this “(11)” behind “PRIMARY KEY”, it works. How can I  
tell Rails how to create the correct statement?

---

<div class="post-metadata">

**Author:** ![heyho](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@heyho](https://www.ruby-forum.com/u/heyho)\
**Post date:** [August 31, 2009, 3:12pm UTC](https://www.ruby-forum.com/t/migration-wrong-sql-statement-is-created/174691/2 "2009-08-31T15:12:32Z")

</div>

ID is a special field in rails, the migrations generate the ID field  
automatically, you don’t need to declare it within the migration.  
Thanks & Regards,  
Dhruva S…

Pablo  
Picasso[http://www.brainyquote.com/quotes/authors/p/pablo\_picasso.html](http://www.brainyquote.com/quotes/authors/p/pablo_picasso.html)

- “Computers are useless. They can only give you answers.”

On Mon, Aug 31, 2009 at 6:37 PM, Xxx Y.

---

<div class="post-metadata">

**Author:** ![heyho](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@heyho](https://www.ruby-forum.com/u/heyho)\
**Post date:** [August 31, 2009, 3:13pm UTC](https://www.ruby-forum.com/t/migration-wrong-sql-statement-is-created/174691/3 "2009-08-31T15:13:07Z")

</div>

2009/8/31 Xxx Y. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Â def self.up  
> Â Â create\_table :users do |t|  
> Â Â Â t.integer :id

You don’t need the line for id, rails will add it automatically

Colin

---

<div class="post-metadata">

**Author:** ![heyho](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@heyho](https://www.ruby-forum.com/u/heyho)\
**Post date:** [August 31, 2009, 3:41pm UTC](https://www.ruby-forum.com/t/migration-wrong-sql-statement-is-created/174691/4 "2009-08-31T15:41:58Z")

</div>

Thank you very much for your quick answers!
