However, web2py maintains the promise of backwards compatibility. One way 
is to have a 'tinyint_boolean' datatype for those who want to use tinyints 
as booleans. But that looks kind of messy and inelegant. 

An alternative is this: We could add a migration script to /scripts to 
convert all boolean data types from CHAR(1) to TINYINT(1), and from 'T' to 
1 and 'F' to 0. Also, when a table model is called in define_table(), it 
would check whether its boolean data types are CHAR or INT, and save the 
result somewhere (so it wouldn't have to keep checking.) If the server is 
restarted, it would once again perform this check. So, a user would run the 
migration script and simply restart the server.

On Thursday, July 12, 2012 9:18:33 PM UTC+8, simon wrote:
>
> I have just come across this exact same issue. 
>
> The web2py adapter converts boolean to char(1) but in MySQL the 
> specification is that boolean is stored as tinyint with 0 and 1. So web2py 
> adapter is incorrect. Not changing it perpetuates the mistake.
>
>
> On Sunday, 6 March 2011 05:14:49 UTC, Kevin Ivarsen wrote:
>>
>> I'm connecting to a legacy MySQL database (migrate=False) with a lot 
>> of fields declared BOOLEAN, and noticed that attempts to modify these 
>> fields with the DAL failed. The DAL issues a query like this: 
>>
>> UPDATE sometable SET someflag='T' WHERE ... 
>>
>> but this gets rejected by MySQL. 
>>
>> Reading through dal.py, I see that the "boolean" type maps to CHAR(1) 
>> in MySQLAdapter, and represent() converts to "T" and "F" values. 
>> However, the BOOLEAN type is a synonym for TINYINT(1) in MySQL, with 
>> values 0 or 1, according to: 
>>
>> http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html 
>>
>> I can trivially change this behavior in dal.py for my purposes, but it 
>> would be interested to try to incorporate this into the main web2py 
>> distribution. Unfortunately, the trivial change will break backwards 
>> compatibility for people who are already depending on the current 
>> behavior. Any thoughts on how this could be done in a backwards- 
>> compatible way, or is it too much of an edge case to worry about? 
>>
>> Cheers, 
>> Kevin
>
>

-- 



Reply via email to