:limit text mysql

I have a rails 3.rc app that I'm developing. I have a text entry in one my models that can sometimes be quite big. I tried setting :limit => 4294967296 on the text column in my migration file but this doesn't seem to have any effect. The column is till created as a TEXT column rather than MEDIUMTEXT or LONGTEXT.

Does anyone have any idea why this might be happening? Is there a better way of ensuring that an entry won't default to TEXT in a mysql database?

Conor, I think this is relevant - I had similar issue when I was saving reports to a db field. To work around, I changed the datatype of the field to :longtext. You can create or change the field to :longtext in your migration and everyone should be happy.

David Kahn wrote:

Conor, I think this is relevant - I had similar issue when I was saving reports to a db field. To work around, I changed the datatype of the field to :longtext. You can create or change the field to :longtext in your migration and everyone should be happy.

Hi David,

Thanks a million for your reply. I will give that a go. I had seen that that is possible but I was a bit worried that it would mean that my migrations wouldn't be database agnostic

Conor Nugent wrote:

David Kahn wrote:

Conor, I think this is relevant - I had similar issue when I was saving reports to a db field. To work around, I changed the datatype of the field to :longtext. You can create or change the field to :longtext in your migration and everyone should be happy.

Hi David,

Thanks a million for your reply. I will give that a go. I had seen that that is possible but I was a bit worried that it would mean that my migrations wouldn't be database agnostic

Is there a reason that you're not using VARCHAR? That should hold the data (in less space, I believe!) and keep your migrations DB-agnostic.

Best,

Conor, I think this is relevant - I had similar issue when I was saving reports to a db field. To work around, I changed the datatype of the field to :longtext. You can create or change the field to :longtext in your migration and everyone should be happy.

Hi David,

Thanks a million for your reply. I will give that a go. I had seen that that is possible but I was a bit worried that it would mean that my migrations wouldn't be database agnostic

Is there a reason that you're not using VARCHAR? That should hold the data (in less space, I believe!) and keep your migrations DB-agnostic.

Doesn't mysql limit varchar to 65kb or so?

http://dev.mysql.com/doc/refman/5.1/en/char.html

Not very pretty, but you could create it as :text and then...

    if connection.adapter_name == 'MySQL'       execute("ALTER TABLE tablename MODIFY fieldname MEDIUMTEXT")     end

That keeps it a bit more db-agnostic.

-philip

Doesn't mysql limit varchar to 65kb or so?

From mysql doc: "Values in VARCHAR columns are variable-length strings. The length can be specified as 1 to 255 before MySQL 4.0.2, 0 to 255 as of MySQL 4.0.2, and 0 to 65,535 as of MySQL 5.0.3. (The maximum actual length of a VARCHAR in MySQL 5.0 is determined by the maximum row size and the character set you use. The maximum effective length is 65,532 bytes.) "

That was the problem I was trying to get over - I found the :LONGTEXT workaround at 10 at night after 14 hour day so very well could be a better solution, but I do remember specifically that I was being cut off at ~65k chars. I don't recall trying varchar... but looks like at least in my case would not have worked.

If you *really* need to store big stuff, maybe you could just use the db to store a filename? It will add overhead to make sure files get deleted when the record goes away, but it could work.

Or maybe use a document-oriented database?

-Dave

maybe you could just use the db to store a filename

From experience I would second this approach... in fact that is what I did on the app I referred to, once I put it off Heroku onto its own environ (as at least stand-alone on Heroku there is no file storage)

If you went this route... use paperclip and store it on S3... which would let you stay on Heroku....

The drawback here is if you keep it on a local disk, you can't easily expand to multiple servers... just something to keep in mind.

Philip Hallstrom wrote:

Thanks a million for your reply. I will give that a go. I had seen that that is possible but I was a bit worried that it would mean that my migrations wouldn't be database agnostic

Is there a reason that you're not using VARCHAR? That should hold the data (in less space, I believe!) and keep your migrations DB-agnostic.

Doesn't mysql limit varchar to 65kb or so?

http://dev.mysql.com/doc/refman/5.1/en/char.html

Quite right. I was looking for size limits on VARCHAR and somehow missed that. Thanks!

Best,

Marnen Laibow-Koser wrote:

Philip Hallstrom wrote:

Thanks a million for your reply. I will give that a go. I had seen that that is possible but I was a bit worried that it would mean that my migrations wouldn't be database agnostic

Is there a reason that you're not using VARCHAR? That should hold the data (in less space, I believe!) and keep your migrations DB-agnostic.

Doesn't mysql limit varchar to 65kb or so?

http://dev.mysql.com/doc/refman/5.1/en/char.html

Quite right. I was looking for size limits on VARCHAR and somehow missed that. Thanks!

Best, -- Marnen Laibow-Koser http://www.marnen.org marnen@marnen.org

Thanks a million for all the suggestions. I'll go with using longtext for now and look into moving over to a solution that stores the files on s3 in the near future.

This was a my first post to forum and I am really appreciate all the help that I got, thanks