/ 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] brugen af LIKE og små og store bog~
Fra : Bo Rattenborg Jørgen~


Dato : 10-10-01 18:15

Jeg vil gerne have en søgefunktion der f.eks. kan finde 'tørke' også selv om
søgeteksten indtastes 'Tørke' men da LIKE tager hensyn til små og store
bogstaver lykkes dette ikke.

Er der nogen der kan hjælpe med ovenstående ?

Mvh
Bo Rattenborg



 
 
Peter Brodersen (10-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 10-10-01 19:51

On Wed, 10 Oct 2001 19:15:22 +0200, "Bo Rattenborg Jørgensen"
<bo.rattenborg@[no spam]mail.dk> wrote:

>Jeg vil gerne have en søgefunktion der f.eks. kan finde 'tørke' også selv om
>søgeteksten indtastes 'Tørke' men da LIKE tager hensyn til små og store
>bogstaver lykkes dette ikke.

mysql> SELECT name FROM table WHERE name LIKE "PETER brodersen";
+-----------------+
| name |
+-----------------+
| Peter Brodersen |
+-----------------+

(skal ses med monospace-font)

En like-søgning tager normalt ikke forskel på store og små bogstaver.

Skulle det mod forventning stadigvæk drille, må du bare smide en LCASE
ind, fx her i en ikke-LIKE-sammenhæng:

mysql> SELECT name FROM table WHERE LCASE(name) = LCASE('PETER
brodersen');
+-----------------+
| name |
+-----------------+
| Peter Brodersen |
+-----------------+

--
- Peter Brodersen

Bo Rattenborg Jørgen~ (10-10-2001)
Kommentar
Fra : Bo Rattenborg Jørgen~


Dato : 10-10-01 23:03


"Peter Brodersen" <professionel@nerd.dk> wrote in message
news:IK0x7.7866$%D3.618984@news000.worldonline.dk...
> On Wed, 10 Oct 2001 19:15:22 +0200, "Bo Rattenborg Jørgensen"
> <bo.rattenborg@[no spam]mail.dk> wrote:
>
> >Jeg vil gerne have en søgefunktion der f.eks. kan finde 'tørke' også selv
om
> >søgeteksten indtastes 'Tørke' men da LIKE tager hensyn til små og store
> >bogstaver lykkes dette ikke.
>
> mysql> SELECT name FROM table WHERE name LIKE "PETER brodersen";
> +-----------------+
> | name |
> +-----------------+
> | Peter Brodersen |
> +-----------------+
>
> (skal ses med monospace-font)
>
> En like-søgning tager normalt ikke forskel på store og små bogstaver.

Hmm heller ikke hvis den kombineres med '%PETER brodersen%' ?

> Skulle det mod forventning stadigvæk drille, må du bare smide en LCASE
> ind, fx her i en ikke-LIKE-sammenhæng:
>
> mysql> SELECT name FROM table WHERE LCASE(name) = LCASE('PETER
> brodersen');

Jepper lige hvad jeg manglede. Nu er næste problem så bare at PHP ikke vil
gøre følgende:
$text_long = 'dette er den lange tekst tørke ';
$text = 'tØrke';

$text_long = eregi_replace(' '.$text.' ',' <SPAN STYLE="COLOR:
#ffaaaa"><U>'.$text.'</U></SPAN> ',$text_long);

print $text_long;

ovenstående virker ikke



Mvh

Bo






Peter Brodersen (10-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 10-10-01 23:11

On Thu, 11 Oct 2001 00:02:51 +0200, "Bo Rattenborg Jørgensen"
<bo.rattenborg@[no spam]mail.dk> wrote:

>> En like-søgning tager normalt ikke forskel på store og små bogstaver.
>Hmm heller ikke hvis den kombineres med '%PETER brodersen%' ?

Nej, ingen problemer hvad det angår.

Sikker på at feltet er et tekstfelt?

>Jepper lige hvad jeg manglede. Nu er næste problem så bare at PHP ikke vil
>gøre følgende:
>$text_long = 'dette er den lange tekst tørke ';
>$text = 'tØrke';

[..]

Det lyder snarere som et problem med charset. Prøv at start din
PHP-kode med fx:

SetLocale("LC_CTYPE", "DANISH");

I mit tilfælde virker DANISH fint, men da_DK er vist også anbefalet
som locale-type.

--
- Peter Brodersen

Christian Schmidt (10-10-2001)
Kommentar
Fra : Christian Schmidt


Dato : 10-10-01 21:08

"Bo Rattenborg Jørgensen" wrote:
>
> Jeg vil gerne have en søgefunktion der f.eks. kan finde 'tørke' også selv om
> søgeteksten indtastes 'Tørke' men da LIKE tager hensyn til små og store
> bogstaver lykkes dette ikke.

LIKE burde nu være ligeglad med, om du skriver store eller små
bogstaver.

Men du kan bare nøjes med at bruge =. Denne operator laver nemlig en
case-insensitive (hvad hedder det på dansk?) sammenligning, dvs. en
sammenligning hvor der ikke skelnes mellem store og små bogstaver -
medmindre kolonnen er erklæret som BINARY.

Således vil "SELECT * FROM tabel WHERE navn = 'ADAM'" og "SELECT * FROM
tabel WHERE navn = 'aDaM'" give nøjagtig samme resultat.

Dette er nok lidt overraskende for de fleste - i hvert fald tog det
fusen på mig i sin tid.


Christian

Bo Rattenborg Jørgen~ (10-10-2001)
Kommentar
Fra : Bo Rattenborg Jørgen~


Dato : 10-10-01 22:39

> LIKE burde nu være ligeglad med, om du skriver store eller små
> bogstaver.

men er det åbenbart ikke, hmm det driller.

Taget fra MySQL's manual:
7.4.6 String comparison functions
Normally, if any expression in a string comparison is case sensitive, the
comparison is performed in case-sensitive fashion.

Dette læser jeg som, at hvis der i strengen er både store og små bogstaver
så tages der hensyn til dette.

> Men du kan bare nøjes med at bruge =. Denne operator laver nemlig en
> case-insensitive (hvad hedder det på dansk?) sammenligning, dvs. en
> sammenligning hvor der ikke skelnes mellem store og små bogstaver -
> medmindre kolonnen er erklæret som BINARY.
>
> Således vil "SELECT * FROM tabel WHERE navn = 'ADAM'" og "SELECT * FROM
> tabel WHERE navn = 'aDaM'" give nøjagtig samme resultat.

kan jeg desværre ikke bruge da den tekst jeg søger i kan være en længere
tekst hvor det søgte ord er indeholdt.

Bo



Peter Brodersen (10-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 10-10-01 22:41

On Wed, 10 Oct 2001 23:38:57 +0200, "Bo Rattenborg Jørgensen"
<bo.rattenborg@[no spam]mail.dk> wrote:

>> LIKE burde nu være ligeglad med, om du skriver store eller små
>> bogstaver.
>men er det åbenbart ikke, hmm det driller.

Prøv at lave en:

desc tabelnavn;

Er du helt sikker på at det field, du søger i, er et textfield
(varchar, text, etc.) og ikke et blob-felt?

--
- Peter Brodersen

Bo Rattenborg Jørgen~ (10-10-2001)
Kommentar
Fra : Bo Rattenborg Jørgen~


Dato : 10-10-01 23:09


"Peter Brodersen" <professionel@nerd.dk> wrote in message
news:Md3x7.7951$%D3.632128@news000.worldonline.dk...
> On Wed, 10 Oct 2001 23:38:57 +0200, "Bo Rattenborg Jørgensen"
> <bo.rattenborg@[no spam]mail.dk> wrote:
>
> >> LIKE burde nu være ligeglad med, om du skriver store eller små
> >> bogstaver.
> >men er det åbenbart ikke, hmm det driller.
>
> Prøv at lave en:
>
> desc tabelnavn;
>
> Er du helt sikker på at det field, du søger i, er et textfield
> (varchar, text, etc.) og ikke et blob-felt?

nej det havde jeg ikke lige styr på det er et blob felt, da varchar ikke
rækker til mængden af indhold. Jeg var ikke lige med på, at dette ikke ville
virke med blob. Men som skevet i andet indlæg så har jeg løst det med
LCASE();

Bo



Peter Brodersen (10-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 10-10-01 23:14

On Thu, 11 Oct 2001 00:09:23 +0200, "Bo Rattenborg Jørgensen"
<bo.rattenborg@[no spam]mail.dk> wrote:

>nej det havde jeg ikke lige styr på det er et blob felt, da varchar ikke
>rækker til mængden af indhold.

Så lav det til et felt af typen TEXT, og dine problemer vil være løst.
BLOB og TEXT har samme længde. Du burde kunne lave en ALTER af det
field, helt uden problemer. Dataen bliver der også, og er du bekymret,
kan du jo lige lave et dump af indholdet først.

>Jeg var ikke lige med på, at dette ikke ville virke med blob.

BLOB er beregnet til binært data, og bliver sammenlignet på samme
grundlag.

>Men som skevet i andet indlæg så har jeg løst det med
>LCASE();

.... men ville det ikke være rart, hvis man nu kan gøre det "rigtigt"?


--
- Peter Brodersen

Christian Schmidt (11-10-2001)
Kommentar
Fra : Christian Schmidt


Dato : 11-10-01 16:38

"Bo Rattenborg Jørgensen" wrote:
>
> > LIKE burde nu være ligeglad med, om du skriver store eller små
> > bogstaver.
>
> men er det åbenbart ikke, hmm det driller.
>
> Taget fra MySQL's manual:
> 7.4.6 String comparison functions
> Normally, if any expression in a string comparison is case sensitive, the
> comparison is performed in case-sensitive fashion.
>
> Dette læser jeg som, at hvis der i strengen er både store og små bogstaver
> så tages der hensyn til dette.

Det er ikke sådan, det skal læses.

En streng kan være enten case-sensitiv eller case-insensitiv (for nu at
fortsætte i en ubehjælpsom dangelsk terminologi). En kolonne af typen
CHAR, VARCHAR eller TEXT er case-insensitiv, medmindre den er erklæret
med BINARY i din CREATE TABLE. En kolonne af typen BLOB er
case-sensitiv.

En simpel streng angivet i en SQL-sætning (fx "'Peter'" i "... WHERE
navn = 'Peter'" er case-insensitiv. Dvs. at udtrykket "'a' = 'A'" er
sandt.

En case-insensitiv streng kan castes til en case-insensitiv streng med
BINARY (se
<URL:http://mysql.borsen.dk/documentation/mysql/bychapter/manual_Reference.html#Case_Sensitivity_Operators>).


Christian

Peter Brodersen (11-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 11-10-01 18:08

On Thu, 11 Oct 2001 17:37:32 +0200, Christian Schmidt
<christian@schmidt.net> wrote:

>En case-insensitiv streng kan castes til en case-insensitiv streng med
>BINARY

.... skulle vel være:

En case-insensitiv streng kan castes til en case-SENSITIV streng med
BINARY

--
- Peter Brodersen

Christian Schmidt (11-10-2001)
Kommentar
Fra : Christian Schmidt


Dato : 11-10-01 19:32

Peter Brodersen wrote:
>
> On Thu, 11 Oct 2001 17:37:32 +0200, Christian Schmidt
> <christian@schmidt.net> wrote:
>
> >En case-insensitiv streng kan castes til en case-insensitiv streng med
> >BINARY
>
> ... skulle vel være:
>
> En case-insensitiv streng kan castes til en case-SENSITIV streng med
> BINARY

Jep


Christian

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

Månedens bedste
Årets bedste
Sidste års bedste