[TYPO3-core] RFC #8542: Cannot create page with Mysl in strict mode (STRICT_TRANS_TABLES)

Steffen Kamper steffen at sk-typo3.de
Thu May 29 11:58:29 CEST 2008


Hi Masi,

"Martin Kutschker" <martin.kutschker-n0spam at no5pam-blackbox.net> schrieb im 
Newsbeitrag 
news:mailman.1.1212054213.15745.typo3-team-core at lists.netfielders.de...
> Martin Kutschker schrieb:
>> Hi!
>>
>> This is a patch request for 4.2 and trunk.
>>
>> Problem: When I want to create a page I get an Mysql error saying that it 
>> has an invalid value for an integer field. The problem is that 
>> "storage_pid" is when not set initially an empty string. It seems that I 
>> get only default values in strict mode for NULL, but no type conversion 
>> from empty string to 0 occurs.
>>
>> Solution: Make the conversion in TCEmain if necessary. A possible 
>> different solution would be to use 0 as TCA default for group fields 
>> (internal_type "db"), but I think it is more proper to make the 
>> conversion in TCEmain if necessary for all such occurrences.
>
> After further analysis I have found that the problem is a bit odd. THe TCA 
> has the type "group"/"db" which uses an integer when uses as "MM". But 
> this is not the case for "storage_pid". What we have here is a field that 
> has "maxitems" of 1 and "prepend_tname" = 0, which means that there will 
> only be an integer stored and not a comma separated list of strings. TYPO3 
> copes with the fact that Mysql will turn an empty list/string into 0. This 
> is fine, but a bit of a hack as a group with exactly one item isn't a 
> group at all.
>
> A "group"/"db" field that is no "MM" would usually be a VARCHAR, but 
> because of the special constraints it may be an INT. What to do now? 
> Change the fields in the Core to VARCHAR or make sure that all fields with 
> such a setup write 0 to the DB? The latter would fix all occurrences in 
> the Core an extensions that follow the (bad?) example of "storage_pid".
>
> I have fixed this experimentally in 
> t3lib_TCEmain::checkValue_group_select_processDBdata(), but it may make 
> sense to return an array with a 0 element in 
> t3lib_loadDBGroup::getValueArray(). Now the function returns an empty 
> array, which is fine for all setups except this one.
>
> Masi

thx for your investigation. Seems that definition of group fields in DB is 
not common.
IIRC the fields where converted from Blob to Varchar (NOT NULL) eg usergroup 
in be_user

I think best way is to have a correct field definition and a correct 
handling in t3lib_TCEmain::checkValue_group_select_processDBdata()

If an extension doesn't use core functions, it has "bad luck" and must be 
changed imho, so better do the correct way instead of using a hack

vg Steffen 




More information about the TYPO3-team-core mailing list