Don't use 'type' as a DB column name ..


I’m creating a simple Migration that adds test data to my database.

A Form has many Elements and every Element belongs to a Form. An element has the mandatory columns name, type and value.

“type” is a reserved field name for single table inheritance (STI):

We’re using “timestamp” without a problem in some of our apps, so that must be another issue.

Commander Johnson wrote:

Gives the error:

Mysql::Error: #23000Column 'type' cannot be null: INSERT INTO `elements`
(`form_id`, `ordering`, `name`, `title`, `type`, `value`, `flags`,
`created_at`, `updated_at`) VALUES(2, NULL, 'First Name', NULL, NULL,
NULL, '2008-09-16 13:59:36', '2008-09-16 13:59:36')

As you can see, the 'type' column somehow isn't inserted.

From looking at that error it's clear that the 5th value sent is NULL
which is your `type` column. So your problem is not with MySQL. Given
that Rails uses a "type" column for single-table inheritance, maybe that
has something to do with your issue.

I had similar issues when trying to add a column called 'timestamp'.

MySQL has a TIMESTAMP data type. I would guess that you could use that
as a column name as long as it's quoted properly (i.e. `timestamp`).

I tend to avoid naming columns with likely database keywords (type,
timestamp, data, time, number, text, etc.).

P.S. I also avoid using TIMESTAMP data type in MySQL. It's may not
behave as you might expect it to. If a column of that type is not send
in a UPDATE statement it will automatically update itself to the current
time of the database server.