/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MySQL] problemer med phpMyAdmin
Fra : Kristian Thy


Dato : 04-04-03 21:59

Jeg sidder og prøver at lave en tabel i MySQL ved hjælp af
phpMyAdmin-interfacet. Man skulle tro at det vidste hvad det gjorde,
men desværre nej. Den laver en SQL-query der ser således ud:

CREATE TABLE `qv_news` (
`id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`head` TINYTEXT NOT NULL ,
`body` MEDIUMTEXT NOT NULL ,
`time` TIMESTAMP NOT NULL ,
INDEX ( `head` , `body` ) ,
FULLTEXT ( `head` , `body` )
)

Det er også hvad jeg har bedt om, og jeg kan ikke finde nogle
syntaksfejl i ovenstående. Men jeg får følgende fejl:

MySQL said: BLOB column 'head' used in key specification without a key
length

Hjælp? Det har tilsyneladende noget at gøre med, at jeg gerne vil have
lavet fuld indeksering på 'head'- og 'body'-felterne, idet hvis jeg
udelader indeksering af 'head' får jeg samme fejl, bare med 'body'.

Jeg *har* tjekket at MySQL-versionen er 3.23.23 eller større (hvorfra
FULLTEXT er understøttet).

\\kristian
--
"I'm a pork. I need commitment!"
--Miss Piggy

 
 
Morten Wulff (05-04-2003)
Kommentar
Fra : Morten Wulff


Dato : 05-04-03 09:30

On 4 Apr 2003 20:59:13 GMT, Kristian Thy <thy@it.edu> wrote:

> Jeg sidder og prøver at lave en tabel i MySQL ved hjælp af
> phpMyAdmin-interfacet.
> Den laver en SQL-query der ser således ud:
>
> CREATE TABLE `qv_news` (
> `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
> `head` TINYTEXT NOT NULL ,
> `body` MEDIUMTEXT NOT NULL ,
> `time` TIMESTAMP NOT NULL ,
> INDEX ( `head` , `body` ) ,
> FULLTEXT ( `head` , `body` )
> )
>
> MySQL said: BLOB column 'head' used in key specification without a key
> length

Du mangler at angive key length for dit index:

INDEX ( head(100) , body(100) )

> Jeg *har* tjekket at MySQL-versionen er 3.23.23 eller større (hvorfra
> FULLTEXT er understøttet).

Ja, men kun hvis du bruger MyISAM tabel-typen (se afsnit 5.4.4 og 6.8 i
manualen).


hth,

wulff


--
Self Injury Information and Support: www.psyke.org

"Let's say the docs present a simplified view of reality..." Larry Wall

Kristian Thy (05-04-2003)
Kommentar
Fra : Kristian Thy


Dato : 05-04-03 23:05

Verily, Morten Wulff spewed forth:

> Du mangler at angive key length for dit index:
>
> INDEX ( head(100) , body(100) )

Søreme ja. Det er jo totalt idiotisk at man skal det, når jeg vil have
indekseret det hele.

>> Jeg *har* tjekket at MySQL-versionen er 3.23.23 eller større (hvorfra
>> FULLTEXT er understøttet).
>
> Ja, men kun hvis du bruger MyISAM tabel-typen (se afsnit 5.4.4 og 6.8 i
> manualen).

Burde selvfølgelig have sagt at det også gav fejl selvom jeg brugte
TYPE = MYISAM. Men i øvrigt bruger MySQL MyISAM-tabeller per default
(se afsnit 7.1 i manualen).

\\kristian
--
Confucius: He who play in root, eventually kill tree.

Peter Brodersen (06-04-2003)
Kommentar
Fra : Peter Brodersen


Dato : 06-04-03 01:54

On 5 Apr 2003 22:04:54 GMT, Kristian Thy <thy@it.edu> wrote:

>> Du mangler at angive key length for dit index:
>>
>> INDEX ( head(100) , body(100) )
>Søreme ja. Det er jo totalt idiotisk at man skal det, når jeg vil have
>indekseret det hele.

Du blander ikke formålet med INDEX og FULLTEXT sammen?

Hvis du vil have et index, der rummer det hele for fx TEXT- og
BLOB-felter, så bliver dit index umådeligt stort, næsten samme
størrelse som datafilen (forudsat at TEXT/BLOB-feltet er det felt,
hvis data fylder mest - hvilket normalt er tilfældet).

Et index er jo blot en sortering af hele feltet (og ikke hvert ord for
sig), så for at indexet skal benyttes, vil du altid skulle matche i
starten af TEXT/BLOB'en - hvilket sjældent er hvad man har brug for
ved en søgning, hvorfor FULLTEXT så kan bruges.

Så: Hvorfor vil du have et helt index på et så stort felt (og så hele
feltet)? Laver du ofte søgninger på det helt præcise indhold af et
TEXT/BLOB-felt?

For mig lyder det som om, det udelukkende er et FULLTEXT-index, du har
brug for. Her bliver ord for ord indekseret, hvilket normalt er hvad,
man ønsker.

Tjek evt. eksemplet i starten af 6.8 MySQL Full-text Search:
http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Fulltext_Search
Bemærk, de nøjes med FULLTEXT og ikke INDEX.

--
- Peter Brodersen

Kristian Thy (06-04-2003)
Kommentar
Fra : Kristian Thy


Dato : 06-04-03 10:25

Verily, Peter Brodersen spewed forth:

> Så: Hvorfor vil du have et helt index på et så stort felt (og så hele
> feltet)? Laver du ofte søgninger på det helt præcise indhold af et
> TEXT/BLOB-felt?
>
> For mig lyder det som om, det udelukkende er et FULLTEXT-index, du har
> brug for. Her bliver ord for ord indekseret, hvilket normalt er hvad,
> man ønsker.

Jeg vil, selvfølgelig, bare have et FULLTEXT-indeks. Problemet er, at
jeg (uvist af hvilken grund) har troet, at det implicerede at man også
var nødt til at have et indeks på feltet.

Doh.

Tak for hjælpen.

\\kristian
--
Real programmers don't comment their code.
It was hard to write, it should be hard to read.

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste