Project

General

Profile

Actions

Bug #21719

closed

Install Tool can not create cachingframework databases

Added by Christian Leicht over 14 years ago. Updated over 13 years ago.

Status:
Closed
Priority:
Should have
Category:
-
Target version:
-
Start date:
2009-11-27
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
4.3
PHP Version:
5.2
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

In Install Tool on Compare, the Tools is not able to Create this 3 new Databases

CREATE TABLE cachingframework_cache_hash_tags (
id int(11) unsigned NOT NULL auto_increment,
identifier text NOT NULL,
tag text NOT NULL,
PRIMARY KEY (id),
KEY cache_id (identifier),
KEY cache_tag (tag(320))
) ENGINE=InnoDB;

CREATE TABLE cachingframework_cache_pages_tags (
id int(11) unsigned NOT NULL auto_increment,
identifier text NOT NULL,
tag text NOT NULL,
PRIMARY KEY (id),
KEY cache_id (identifier),
KEY cache_tag (tag(320))
) ENGINE=InnoDB;

CREATE TABLE cachingframework_cache_pagesection_tags (
id int(11) unsigned NOT NULL auto_increment,
identifier text NOT NULL,
tag text NOT NULL,
PRIMARY KEY (id),
KEY cache_id (identifier),
KEY cache_tag (tag(320))
) ENGINE=InnoDB;

Problem is that the identifier Key has no lenght

After Drop all chachingframwork databases (the old one from 4.3 svn versions) is not possible to create with Install Tool the new again.

Also, i cant fix this changes in Install Tools:

Add fields
select/deselect all
ALTER TABLE cachingframework_cache_hash_tags ADD KEY cache_id (identifier);
ALTER TABLE cachingframework_cache_pages_tags ADD KEY cache_id (identifier);
ALTER TABLE cachingframework_cache_pagesection_tags ADD KEY cache_id (identifier);
Changing fields
select/deselect all
ALTER TABLE sys_registry DROP KEY entry_identifier;
ALTER TABLE sys_registry ADD UNIQUE entry_identifier (entry_namespace,entry_key(320));
ALTER TABLE sys_refindex CHANGE tablename tablename text;
Current value: varchar(100) default ''
ALTER TABLE sys_refindex CHANGE ref_table ref_table text;
Current value: varchar(100) default ''
ALTER TABLE tx_realurl_uniqalias CHANGE field_alias field_alias text;
Current value: varchar(75) default ''

My MySQL Version: 5.0.32 Debian/etch11

(issue imported from #M12801)


Related issues 1 (0 open1 closed)

Related to TYPO3 Core - Bug #21730: ALTER TABLE is not able to parse length restriction in index creation (Oracle)ClosedXavier Perseguers2009-11-29

Actions
Actions #1

Updated by Oliver Hader over 14 years ago

What DMBS are you using? The field tag is a VARCHAR thus creating an index with a length of 320 characters looks a bit strange. I guess you have DBAL installed?

Actions #2

Updated by Christian Leicht over 14 years ago

I have run a regular MySQL 5.0.32 from the debian etch. DBAL is not aktiv.
I thought the databases are created using the core TCA? As a user, I can not change anything.

These are the entries can not be eliminated:

Add fields
select/deselect all
ALTER TABLE cachingframework_cache_hash_tags ADD KEY cache_id (identifier);
ALTER TABLE sys_registry ADD UNIQUE entry_identifier (entry_namespace,entry_key(320));
ALTER TABLE cachingframework_cache_pages_tags ADD KEY cache_id (identifier);
ALTER TABLE cachingframework_cache_pagesection_tags ADD KEY cache_id (identifier);
ALTER TABLE tx_realurl_uniqalias ADD KEY bk_realurl01 (field_alias,field_id,value_id,lang,expire);
Changing fields
select/deselect all
ALTER TABLE sys_refindex CHANGE tablename tablename text;
Current value: varchar(100) default ''
ALTER TABLE sys_refindex CHANGE ref_table ref_table text;
Current value: varchar(100) default ''

Actions #3

Updated by Xavier Perseguers over 14 years ago

Tested on a website with a MySQL database and DBAL active:

- Dropped caching_* tables in MySQL
- Went to Install Tool > Database Analyzer > Compare
- 6 tables are selected in the Add tables section, namely cachingframework_cache_hash, cachingframework_cache_hash_tags, cachingframework_cache_pages, cachingframework_cache_pages_tags, cachingframework_cache_pagesection, cachingframework_cache_pagesection_tags. None of them contain a length restriction for an index. Typically, cachingframework_cache_hash_tags has

KEY cache_tag (tag)

and NOT

KEY cache_tag (tag(320))

as said in the description

- All went fine, tables are properly created

Tested again on a website with an Oracle database and (of course) DBAL active:

- Created mapping configuration to avoid identifier length restriction:

$TYPO3_CONF_VARS['EXTCONF']['dbal']['mapping'] = array(
'cachingframework_cache_hash' => array(
'mapTableName' => 'cf_cache_hash',
),
'cachingframework_cache_pages' => array(
'mapTableName' => 'cf_cache_pages',
),
'cachingframework_cache_hash_tags' => array(
'mapTableName' => 'cf_cache_hash_tags',
),
'cachingframework_cache_pages_tags' => array(
'mapTableName' => 'cf_cache_pages_tags',
),
'cachingframework_cache_pagesection' => array(
'mapTableName' => 'cf_cache_pagesection',
),
'cachingframework_cache_pagesection_tags' => array(
'mapTableName' => 'cf_cache_pagesection_tags',
),
);

- Dropped all cf_* tables in Oracle
- Went to Install Tool > Database Analyzer > Compare
- Same here: 6 tables are selected in the Add tables sections and are properly created except for some indexes but that is related to bug #16292 and has actually nothing to do with this bug report. Furthermore, I cannot confirm the length restriction of 320 or anything else in the CREATE TABLE statements.

Regarding the other "bug" when having a length restriction in an ALTER TABLE statement, this is related to bug #16292.

Actions #4

Updated by Xavier Perseguers over 14 years ago

Tested without DBAL on a MySQL-only install of TYPO3. I cannot confirm the problem there either. I don't know why you have a restriction of 320 characters in your case. It seems to come from "nowhere"...

Actions #5

Updated by Jana Brner over 14 years ago

I just tried to upgrade our dev website from 4.2.10 to 4.3.0 and it seems we are having the same problem. We are using MySQL 5.0.77. DBAL isn't installed.

The MySQL Database replies with following error when trying to create the sys_registry table for example:
#14798 - BLOB/TEXT column 'entry_namespace' used in key specification without a key length

This is what the install tool want to do for the table mentioned above:

CREATE TABLE sys_registry (
uid int(11) unsigned NOT NULL auto_increment,
entry_namespace text NOT NULL,
entry_key text NOT NULL,
entry_value blob,
PRIMARY KEY (uid),
UNIQUE entry_identifier (entry_namespace,entry_key(256))
);

There are also the three tables, that are in the report above, listed for creation and some alteration too. All changing from a varchar to a text field type. Like this one:
ALTER TABLE sys_refindex CHANGE ref_table ref_table text;
Current value: varchar(80) default ''

I'm not sure if that helps finding/solving the problem but I found an article to the MySQL error here:
http://www.mydigitallife.info/2007/07/09/mysql-error-1170-42000-blobtext-column-used-in-key-specification-without-a-key-length/

Actions #6

Updated by Christian Leicht over 14 years ago

This is exactly the problem I have, too. I'm not as fit in MySQL. Here are a few still have the error messages:

ALTER TABLE cachingframework_cache_hash_tags ADD KEY cache_id (identifier);
ALTER TABLE sys_registry ADD UNIQUE entry_identifier (entry_namespace,entry_key(320));
ALTER TABLE sys_refindex ADD KEY lookup_rec (tablename,recuid);
ALTER TABLE sys_refindex ADD KEY lookup_uid (ref_table,ref_uid);
ALTER TABLE cachingframework_cache_pages_tags ADD KEY cache_id (identifier);
ALTER TABLE cachingframework_cache_pagesection_tags ADD KEY cache_id (identifier);
ALTER TABLE tx_realurl_uniqalias ADD KEY bk_realurl01 (field_alias,field_id,value_id,lang,expire);

Thanks for your help

Christian

Actions #7

Updated by Sascha Hinze over 14 years ago

I have a similar problem. After upgrade from 4.2.10 to 4.3.0 I get these messages in the database analyser after "Compare":

ALTER TABLE cachingframework_cache_hash DROP KEY cache_id;
ALTER TABLE cachingframework_cache_hash ADD KEY cache_id (identifier(256));
ALTER TABLE sys_refindex DROP KEY lookup_string;
ALTER TABLE sys_refindex ADD KEY lookup_string (ref_string(400));
ALTER TABLE cachingframework_cache_pages DROP KEY cache_id;
ALTER TABLE cachingframework_cache_pages ADD KEY cache_id (identifier(256));

"Write to database" doesn't work.
We use Mysql 5.1, the database is set to UTF-8. DBAL is not installed.

Thanks for help

Sascha

Actions #8

Updated by Bernie over 14 years ago

Same problem here. Our database is also set to UTF-8.

Actions #9

Updated by Christian Leicht over 14 years ago

The problem also exists with other databases, like the tt_news 3.0.1.

Always get the mysql Error 1170

Actions #10

Updated by Pascal over 14 years ago

I have the same issue. I tried to upgrade from 4.2.9 to 4.3 using PHP 5.2.11 and MySQL 4.1.22

I downloaded the Typo3 4.3 package from the typo3.org website.

These are the tables that keep on showing in the install tool Database compare (I cannot get rid of them when clicking 'write to database'):

Add fields
ALTER TABLE sys_history ADD KEY recordident (tablename(510),recuid,tstamp);
Changing fields
select/deselect all
ALTER TABLE cache_hash ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cachingframework_cache_hash ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cache_imagesizes ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE sys_log ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cache_pages ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cache_pagesection ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cachingframework_cache_pages ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cachingframework_cache_pagesection ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cache_typo3temp_log ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cache_md5params ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE cache_treelist ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE fe_session_data ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE fe_sessions ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_phash ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_fulltext ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_rel ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_words ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_section ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_grlist ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_stat_search ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE index_stat_word ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE tx_realurl_pathcache ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE tx_realurl_chashcache ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE tx_realurl_urldecodecache ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE tx_realurl_urlencodecache ENGINE=InnoDB;
Current value: ENGINE=
ALTER TABLE sys_refindex CHANGE tablename tablename text;
Current value: varchar(80) default ''
ALTER TABLE sys_refindex CHANGE ref_table ref_table text;
Current value: varchar(80) default ''
ALTER TABLE sys_refindex DROP KEY lookup_string;
ALTER TABLE sys_refindex ADD KEY lookup_string (ref_string(400));
Add tables
select/deselect all
CREATE TABLE cachingframework_cache_hash_tags (
id int(11) unsigned NOT NULL auto_increment,
identifier text NOT NULL,
tag text NOT NULL,
PRIMARY KEY (id),
KEY cache_id (identifier),
KEY cache_tag (tag(256))
) ENGINE=InnoDB;
CREATE TABLE sys_registry (
uid int(11) unsigned NOT NULL auto_increment,
entry_namespace text NOT NULL,
entry_key text NOT NULL,
entry_value blob,
PRIMARY KEY (uid),
UNIQUE entry_identifier (entry_namespace,entry_key(256))
);
CREATE TABLE cachingframework_cache_pages_tags (
id int(11) unsigned NOT NULL auto_increment,
identifier text NOT NULL,
tag text NOT NULL,
PRIMARY KEY (id),
KEY cache_id (identifier),
KEY cache_tag (tag(256))
) ENGINE=InnoDB;
CREATE TABLE cachingframework_cache_pagesection_tags (
id int(11) unsigned NOT NULL auto_increment,
identifier text NOT NULL,
tag text NOT NULL,
PRIMARY KEY (id),
KEY cache_id (identifier),
KEY cache_tag (tag(256))
) ENGINE=InnoDB;

Is there any patch for this?

Actions #11

Updated by Irene Höppner over 14 years ago

You are probably using

$TYPO3_CONF_VARS['SYS']['multiplyDBfieldSize']

somewhere. Thus TYPO3 makes the field to a bigger size (f.i. text instead of varchar(255). Those fields can not be used as keys without giving the key a length (see http://www.mydigitallife.info/2007/07/09/mysql-error-1170-42000-blobtext-column-used-in-key-specification-without-a-key-length/).

Take a look, if your database isn't utf-8 formatted yet. Then you dont need the multiplyDBfieldSize anymore.

Maybe the key-fields should be taken into account from the install tool, if multiplyDBfieldSize is being used?

Actions #12

Updated by Jana Brner over 14 years ago

Thanks for the info!
Our database is UTF-8 and ['SYS']['multiplyDBfieldSize'] was set to 2.
When removing the value the table creations and the alterations worked.

Actions #13

Updated by Sascha Hinze over 14 years ago

Thats it!
Our database was also set to UTF-8 and ['SYS']['multiplyDBfieldSize'] was set to 2. "ALTER TABLE" worked when i removed this value.
Thanks for your help Irene.

Actions #14

Updated by Christian Leicht over 14 years ago

Yes its true.

A ['SYS']['multiplyDBfieldSize'] = 1 fixed this problem.

BUT dont forget that arabic and chinese sites still have this trouble. On this languages you need a ['SYS']['multiplyDBfieldSize'] = 2 or 3

Its still a bug. On 4.2.x this works fine

Christian

Actions #15

Updated by Pascal over 14 years ago

Hello,

I have set ['SYS']['multiplyDBfieldSize'] = 1

But I still keep getting errors when I compare the DB:

ERROR: Query could not be parsed: "SQL engine parse ERROR: Field type unknown in parseFieldDef()!: near "entry_identifier (entry_namespace,entry_key) "". Query: "ALTER TABLE sys_registry ADD UNIQUE entry_identifier (entry_namespace,entry_key);"

I get this error when I run:

Add fields
select/deselect all
ALTER TABLE cachingframework_cache_hash_tags ADD KEY cache_id (identifier);
ALTER TABLE sys_registry ADD UNIQUE entry_identifier (entry_namespace,entry_key);
ALTER TABLE sys_history ADD KEY recordident (tablename,recuid,tstamp);
ALTER TABLE cachingframework_cache_pages_tags ADD KEY cache_id (identifier);
ALTER TABLE cachingframework_cache_pagesection_tags ADD KEY cache_id (identifier);

Actions #16

Updated by Jana Brner over 14 years ago

I'm not sure if removing the index and setting it to 1 is/does the same.
In the configuration is pointed to this typo3 wiki entry:
http://wiki.typo3.org/index.php/UTF-8_support
All green boxes (at the bottom) say that when your database is set to UTF-8 you shouldn't use ['SYS']['multiplyDBfieldSize'] .
So I simply removed the digit out of the field.

Actions #17

Updated by Xavier Perseguers about 14 years ago

Yes, multiplyDBfieldSize is an old way to deal with UTF8 character set without a real UTF8 DB. This should not be used anymore in any new install. I guess it only still makes sense for old install.

May this bug be closed?

Actions #18

Updated by Christian Kuhn almost 14 years ago

Resolved, won't fix.

['SYS']['multiplyDBfieldSize'] is deprecated and shouldn't be used anymore.

Actions

Also available in: Atom PDF