Til MySQL Eliten: FULLTEXT indeks skaber fejl i indeks filen
Jeg har tidligere stillet spørgsmål om en tabel jeg har med et FULLTEXT indeks. Dengang kunne ingen svare, men jeg har muligvis indsnævret problematikken så nogen kan give et kvalificeret svar.Nedenstående tabel indeholder et FULLTEXT indeks, der indekserer 2 VARCHAR felter + 4 TEXT felter.
CREATE TABLE `visitkort` (
`id` int(10) unsigned NOT NULL auto_increment,
`kategori_id` int(10) unsigned NOT NULL default \'0\',
`aktiv` tinyint(3) unsigned NOT NULL default \'0\',
`navn` varchar(60) NOT NULL default \'\',
`adresse` varchar(150) NOT NULL default \'\',
`postnr` varchar(5) NOT NULL default \'\',
`tlf` varchar(20) NOT NULL default \'\',
`fax` varchar(20) NOT NULL default \'\',
`email` varchar(60) NOT NULL default \'\',
`password` varchar(20) NOT NULL default \'\',
`url` varchar(150) NOT NULL default \'\',
`beskrivelse` varchar(200) NOT NULL default \'\',
`visitkort` tinyint(3) unsigned NOT NULL default \'0\',
`skabelon` tinyint(3) unsigned NOT NULL default \'0\',
`logo` tinyint(3) unsigned NOT NULL default \'0\',
`billede` tinyint(3) unsigned NOT NULL default \'0\',
`tekst1` text NOT NULL,
`tekst2` text NOT NULL,
`tekst3` text NOT NULL,
`tekst4` text NOT NULL,
PRIMARY KEY (`id`),
KEY `kategori_id` (`kategori_id`),
KEY `bruger_id` (`visitkort`),
KEY `postnr` (`postnr`),
KEY `email` (`email`),
FULLTEXT KEY `ft`
(`navn`,`beskrivelse`,`tekst1`,`tekst2`,`tekst3`,`tekst4`)
) TYPE=MyISAM;
Tabellen indeholder p.t. 338 rows, og fejlen er som følger:
Når jeg indsætter en ny row, f.eks. med følgende sætning fra MySQL konsollen:
insert into visitkort (navn, kategori_id) values (\'test7\', 106);
og bagefter kører en \"myisamchk --extend-check visitkort\", får jeg fejlen:
C:\\mysql\\data\\midtfyn>myisamchk --extend-check visitkort
Checking MyISAM file: visitkort
Data records: 339 Deleted blocks: 0
myisamchk: warning: 1 clients is using or hasn\'t closed the table properly
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check data record references index: 4
- check data record references index: 5
- check records and index references
MyISAM-table \'visitkort\' is usable but should be fixed
For at kunne reparere tabellen (indekset) er jeg først nødt til at eksekvere \"flush tables\", hvorefter \"myisamchk --safe-recover visitkort\" kan reparere med følgende meddelelse
C:\\mysql\\data\\midtfyn>myisamchk --safe-recover -force visitkort
- recovering (with sort) MyISAM-table \'visitkort.MYI\'
Data records: 339
- Fixing index 1
Found block with too small length at 22812; Skipped
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
Hvis jeg drop\'er FULLTEXT indekset virker alting fint. Er der en bug i FULLTEXT? Måske *skal* TEXT felterne acceptere NULL-værdier? (Har jeg ikke afprøvet)
Jeg har nu bakset med det her i en måned, og inden jeg skriver til Monty vil jeg gerne først høre eksperternes bud. Så hvis du længe har savnet et udfordrene spørgsmål, så har du hermed fået det.
