[TYPO3-core] RFC #11694: Table sys_refindex / KEY lookup_string not UTF-8 compatible
Rupert Germann
rupi at gmx.li
Wed Oct 14 16:18:24 CEST 2009
Hi,
this is a SVN patch request.
Type: Bugfix (follow-up)
Bugtracker references:
http://bugs.typo3.org/view.php?id=11694
Branches: Trunk
Problem:
In t3lib/stddb/tables.sql the key definition was changed from
(ref_table(133),ref_string) to (ref_table,ref_string).
This leads to an invalid key for databases running in UTF8 mode. Cause
of this is that keys in MySQL are defined on character lengths but the
internal limits are counted in bytes. As MySQL is limited to 1000 bytes
per Index the above definition causes a Problem since the Index is 1365
Bytes (MySQL 5.x, using 3 Bytes per character) or 1820 bytes (MySQL 6.0
using 4 bytes per character).
This bug shows up in the install tool where the index cannot be
updated/created.
Steps To Reproduce:
Create a MySQL Database in UTF-8 collaction/character_set and run TYPO3
Install tool to create tables
Solution:
remove table "ref_table" from KEY "lookup_string"
Info:
writing the explain output of all sys_refindex related queries to devlog
showed that the key "lookup_string" without "ref_table" had the same
influence on the amount of selected rows as with "ref_table".
here's the snippet that I used to test.
insert this to function exec_SELECTquery() in t3lib_db:
...
if (strpos($from_table, 'sys_ref') !== FALSE) {
$expRes = $this->sql_query('EXPLAIN ' . $query);
$explain = $this->sql_fetch_assoc($expRes);
t3lib_div::devLog('refIndex test', __FUNCTION__ , 1, array(
'trace' => t3lib_div::debug_trail(), 'query' => $query, 'EXPLAIN' =>
$explain));
}
....
4_2 and 4_1 have the same index definition but the field ref_table is
varchar(40), so no problem in this branches.
greets
rupert
More information about the TYPO3-team-core
mailing list