[TYPO3-core] RFC: #8399: field tablename in sys_refindex too short
Michael Stucki
michael at typo3.org
Thu Aug 13 11:55:10 CEST 2009
I need to stress this again. Currently, the table sys_refindex CANNOT be
created on UTF-8 tables (and UTF-8 is what we want) because of this change.
See http://bugs.typo3.org/view.php?id=11694 for more information, plus
see my detailed explanation below.
After reading through this thread, I notice that first it was proposed
to change the field length to 64 chars until Dmitry suggested that 255
is possible for varchar. Besides that, I find no reason for using 255.
So my suggested solution is to change _all_ fields that have been
changed by this "fix" (see changeset attached) back to 64 characters.
That would solve #11694 and still improve #8399 which allowed only 40
characters before.
- michael
Michael Stucki schrieb:
> Hi Ingo & Co.
>
> Ingo Renner wrote:
>> Steffen Kamper wrote:
>>
>>> After clarify from Dmitry i now changed all relevant fields to
>>> varchar(255).
>>> New patch is attached.
>> nobrainer, +1
>
> Not quite. When changing fields you should also check if the database
> updater likes it.
>
> The problem here was that a field was enlarged which was part of a key:
>
> CREATE TABLE sys_refindex (
> hash varchar(32) DEFAULT '' NOT NULL,
> tablename varchar(255) DEFAULT '' NOT NULL,
> recuid int(11) DEFAULT '0' NOT NULL,
> [...]
> ref_table varchar(255) DEFAULT '' NOT NULL,
> ref_uid int(11) DEFAULT '0' NOT NULL,
> ref_string varchar(200) DEFAULT '' NOT NULL,
>
> PRIMARY KEY (hash),
> KEY lookup_rec (tablename,recuid),
> KEY lookup_uid (ref_table,ref_uid),
> KEY lookup_string (ref_table,ref_string)
> );
>
> Now updating this table will always fail, and here is the reason:
>
> - Indexes can only be 1000 bytes and no longer
> - Our database content is UTF-8 as we recommend that to all users
> - A UTF-8 field uses 3 times the string size
> - So the index "lookup_string" is 255*3 + 200*3 = 1365 bytes long, which
> is > 1000
>
> The solution is to limit the key length, which I did as follows:
>
> KEY lookup_string (ref_table(133),ref_string)
>
> Reason:
> I expect that ref_string may take a better use of the full field size
> than ref_table (see discussion before). Therefore I only limit the size
> of ref_table to 133 characters, so the resulting key in a UTF-8 table
> will be 133*3 + 200*3 = 999 bytes.
>
> I consider this a no-brainer although it took me quite some time to
> figure this out.
>
> The fix is committed in revision 4434 (find the changeset attached).
>
> - michael
>
--
Use a newsreader! Check out
http://typo3.org/community/mailing-lists/use-a-news-reader/
More information about the TYPO3-team-core
mailing list