On Mon, Mar 23, 2009 at 2:06 PM, VSG
<hoathenguyen85-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
> this may seem silly but i just noticed that if in mysql the column
> which is a tinyint(1) happens 2 or greater, by a chance of glitch or
> corruption in the database(i did it manually ofcourse but i am
> speaking hypothetically), rails would see it as false. but i find that
> really wrong seeing how in mysql it sees any non-zeroes as true.
>
In regards to MySQL, tinyint( 1 ) represents the following range of values:
-128 to 127
Next, MySQL documents says the following which they have been saying for the
longest:
"We intend to implement full boolean type handling, in accordance with
standard SQL, in a future MySQL release." 5.0
"We intend to implement full boolean type handling, in accordance with
standard SQL, in a future MySQL release." 5.1
"We intend to implement full boolean type handling, in accordance with
standard SQL, in a future MySQL release." 6.0
If you''re requiring better boolean handling, I would recommend
switching to
PostgreSQL. For example,
Valid literal values for the "true" state are:
TRUE''t''''true''''y''''yes''''1''
For the "false" state, the following values can be used:
FALSE''f''''false''''n''''no''''0''
Next, I really don''t want exceptions firing off because I inserted
values
into the database to
test a hypothesis. You can probably do this for every type with MySQL. I
would recommend
sanitizing and/or validating your input before entering it into the
database.
>
> i really think if it does happen to be any number other than 1 or 0 it
> should throw an exception saying the data is corrupted or something
> because rails should only return 0 or 1. am i crazy for thinking like
> this?
>
Again, you should validate your input. If it''s a check box, the state
is
either 1 or 0 by definition.
>
> also can somebody point to me where in the code it does the tinyint(1)
> to boolean conversion? or could that possibly be a mysql thing?
>
In short, Rails is following MySQL definition of what a boolean is and how
it is to evaluated and you should be able to find the information in the
following file within the Rails source:
rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
Good luck,
-Conrad
>
> thx,
> VSG
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---