[MySQL] Functie 'LOWER' doet niets

Pagina: 1
Acties:

  • _fool
  • Registratie: Augustus 2003
  • Laatst online: 13-02 19:46

_fool

Helemaal zo gek nog niet

Topicstarter
Hey allen,

Ik heb een eenvoudig forum geschreven. Dat forum draait op twee verschillende servers, en op een van de twee servers treedt een vreemd probleem op.

Ik heb een zoekfunctie gemaakt die de inhoud van alle posts doorzoekt op de aanwezigheid van een zoek-string. Om te voorkomen dat ik lower/uppercase voorkomens van de zoekstring mis, zoek ik de lowercased zoekstring in LOWER(inhoud_post).

code:
1
2
3
SELECT id_post
FROM e_posts
WHERE LOWER(inhoud_post) LIKE '%zoekterm%'


Op de ene server werkt dit als een tierelier, op de andere lijkt de LOWER-functie in MySQL niets te doen. Als ik LOWER(inhoud_post) AS low_content opvraag en weergeef, staan er nog Uppercase letters tussen. Toch doet de functie wel iets: als ik
code:
1
LOWER('DiT Is EeN StRiNG VoL MeT HooFdLeTtERs')

weergeef dan is het resultaat:
code:
1
dit is een string vol met hoofdletters


Server 1 (LOWER werkt goed)
PHP Version 5.0.4
MySQL 4.1.16

Server 2 (LOWER werkt niet goed)
PHP 5.1.4
MySQL 5.1.9

Op fora kom ik wel tegen dat de LOWER en UPPER functie soms niet goed werken, maar dat is dan juist in oudere MySQL-versies. "In MySQL 5 zal het opgelost zijn", schrijven ze daar hoopvol. Terwijl ik het probleem juist alleen mat MySQL 5 heb.

Ikniesnapnie :S Is dit een bekend probleem? Of schrijf ik gewoon crappy code?

specs


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Probeer eens LCASE in plaats van LOWER? Hmm, zal niet helpen, da's niet meer dan een alias. :P

Trouwens, is LIKE niet van zichzelf al case insensitive?

edit:
Is het niet dit probleem?

[ Voor 43% gewijzigd door NMe op 20-06-2006 13:33 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • _fool
  • Registratie: Augustus 2003
  • Laatst online: 13-02 19:46

_fool

Helemaal zo gek nog niet

Topicstarter
Haa, dank voor het meedenken!

Voor zover ik kan ontdekken is %LIKE% -althans op mijn probleemserver- wel casesensitive. Als ik op die server in phpadmin de zoekfunctie gebruik met %LIKE% verschillen de resultaten, afhankelijk van of ik hoofdletters gebruik.

Wat je link betreft: op beide servers wordt de inhoud van de posts opgeslagen als mediumblobs, binary dus. Het zou kunnen dat de nieuwere MySQL geen blobs meer LOWERed. Gelukkig ondersteunt die zelfde nieuwe MySQL wel grotere varchars. Ik ga zometeen proberen om de mediumblobs om te zetten naar grote varchars, maar dan moet ik wel oppassen dat ik geen data 'wegknip' :)

[ Voor 21% gewijzigd door _fool op 20-06-2006 15:46 ]

specs


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Dat lijkt idd je probleem, van -NMe-'s linkje
Yes, this was corrected in 4.1.2. Unless dealing with actual binary columns
(BINARY, VARBINARY, BLOB) UPPER/LOWER will change case.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Waarom gebruik je BLOB's voor tekstuele gegevens? BLOB staat voor Binary Large Object. Je kan het toch gewoon in een TEXT-veld opslaan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

-NMe- schreef op dinsdag 20 juni 2006 @ 13:31:
Probeer eens LCASE in plaats van LOWER? Hmm, zal niet helpen, da's niet meer dan een alias. :P
Niet in relatie tot MySQL, maar ik heb met DB2 ervaren dat LOWER in bepaalde situaties geen resultaten teruggeeft itt LCASE. Zie ook [rml][ J2EE] Hibernate/DB2 SQLGrammarException bij lower() icm FK[/rml] en http://balusc.xs4all.nl/srv/dev-j2p-dlb.html. Best de moeite waard om dat eens te proberen, je weet maar nooit :)

  • _fool
  • Registratie: Augustus 2003
  • Laatst online: 13-02 19:46

_fool

Helemaal zo gek nog niet

Topicstarter
Gelukt! Dank.

En BalusC (hieronder): de oplossing lag inderdaad in het datatype. Varchars worden wel mooi geLOWERed. Text werkt ook, net gechecked.

Ennehm, ik zal inderdaad mn structuur eens doorlopen op dit soort inconsequenties :)

[ Voor 41% gewijzigd door _fool op 21-06-2006 16:29 ]

specs


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Uhm, wat was precies de oplossing?

Deze?
Ik ga zometeen proberen om de mediumblobs om te zetten naar grote varchars

[ Voor 57% gewijzigd door BalusC op 20-06-2006 15:52 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

BalusC schreef op dinsdag 20 juni 2006 @ 15:47:
[...]
Niet in relatie tot MySQL, maar ik heb met DB2 ervaren dat LOWER in bepaalde situaties geen resultaten teruggeeft itt LCASE. Zie ook [rml][ J2EE] Hibernate/DB2 SQLGrammarException bij lower() icm FK[/rml] en http://balusc.xs4all.nl/srv/dev-j2p-dlb.html. Best de moeite waard om dat eens te proberen, je weet maar nooit :)
Ik weet niet hoe het in DB2 geïmplementeerd is, maar in de manual van MySQL staat dat LOWER en LCASE synoniem zijn, dus het lijkt me dat het een en dezelfde functie is. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Pagina: 1