Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Hoofdlettergevoeligheidsprobleem

Pagina: 1
Acties:

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 20-10 16:34
Ik heb een probleem met hoofdlettergevoeligheid in MySQL of eigenlijk Linux misschien wel?

Het zit dus zo, er is een MySQL server die gegevens binnenkrijgt, de ene keer gaat dit naar d.d de andere keer d.l of D.L. Daar gaat het dus mis. Op de windows server maakt het niet uit d.l of D.L het komt allemaal in d.l te staan, echter in linux is het wel een probleem. Als de tabel daar l heet dan bestaat L niet.

Ik ben dus op zoek naar een oplossing voor dit probleem. Ik heb er ook al voor rondgezocht, maar de oplossing die je daar krijgt is wees consistent met het hoofdlettergebruik. Dit zou natuurlijk een makkelijke oplossing zijn, al je php bestandjes doorzoeken en zorgen dat alles grote/kleine letter word.

Daar zit in mijn geval dus het probleem, deze software zit in draadloze kastjes verspreid door de benelux welke verbinding maken met de mysql poort en hun queries uitvoeren. Software aanpassen is dus in principe geen oplossing, andere oplossing is natuurlijk bij Windows te blijven maar dat is eigenlijk ook geen optie..

  • Daspeed
  • Registratie: Maart 2001
  • Nu online
Kun je niet iets heel smerigs doen met Views en/of instead of triggers?

edit: je kunt beter eerst de oplossingen van de anderen proberen denk ik :P

[ Voor 35% gewijzigd door Daspeed op 24-10-2007 12:35 ]


  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Het ligt misschien aan je collatie. Je kunt namelijk keizen voor xx_ci en xx_cs, welke resp. Case Insensitivie en Case Sensitive zijn. Ik heb er zelf nooit last van gehad en heb er ook geen ervaring mee, maar misschien is dit wat je zoek.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Als ik ga zoeken dan kom ik onder andere een bugreport tegen: http://bugs.mysql.com/bug.php?id=19967

En een verwijzing naar de manual: http://dev.mysql.com/doc/...ame-case-sensitivity.html
"...
Exception: If you are using InnoDB tables, you should set lower_case_table_names to 1 on all platforms to force names to be converted to lowercase.
..."

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

"...
Exception: If you are using InnoDB tables, you should set lower_case_table_names to 1 on all platforms to force names to be converted to lowercase.
..."
Dat gaat alleen om hoe de tabellen op disk worden opgeslagen, dan heb je dus nog steeds een probleem als je in je queries niet constistent bent (dus de ene keer kleine en de andere keer hoofdletters)....

Maarja, als je idd in je php code niet constistent bent geweest, heb je gewoon niet zo netjes geprogd 8)7 .... Kan zo snel echt niets bedenken waarvoor je niet je code hoeft aan te passen... ja, de optie die je al noemde: bij windows blijven

[ Voor 20% gewijzigd door Verwijderd op 24-10-2007 12:42 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

En vanaf nu nooit meer uppercase en lowercase door elkaar gebruiken, alsof ze hetzelfde zijn. Het zijn verschillende karakters met veschillende karaktercodes en systemen die ze als verschillend behandelen hebben groot gelijk.

Wie trösten wir uns, die Mörder aller Mörder?


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Y0ur1 schreef op woensdag 24 oktober 2007 @ 12:30:
Het ligt misschien aan je collatie. Je kunt namelijk keizen voor xx_ci en xx_cs, welke resp. Case Insensitivie en Case Sensitive zijn. Ik heb er zelf nooit last van gehad en heb er ook geen ervaring mee, maar misschien is dit wat je zoek.
Dit is geen encoding/collation probleem. ;)

Het is hoe dan ook een goed idee om het per direct de code te fixen, opdat tabelnamen voortaan consistent gebruikt worden, en in de hoop dat de oude clients ooit uitgefaseerd raken. Dat laatste is uiteraard een utopie, maar je kan altijd zelf je best doen. :)

{signature}


  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 26-11 15:25

djiwie

Wie?

Kun je niet een symlink (met hoofdletters) maken naar de echte tabelbestanden (met kleine letters)? Waarschijnlijk zal MySQL dat niet leuk vinden c.q. gaat het uberhaupt niet werken, maar je kunt het allicht proberen. :)

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Zeg dan ook niks :|

[ Voor 91% gewijzigd door RobIII op 25-10-2007 13:20 ]


  • Johnny
  • Registratie: December 2001
  • Laatst online: 28-11 13:11

Johnny

ondergewaardeerde internetguru

Een hackerige oplossing zou zijn om tussen de MySQL-server en clients een proxy te zetten die de gegevens omzet en dan pas doorgeeft. Het is niet zo heel erg moeilijk maar vergt wel wat kennis van programmeren en netwerken.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Volgens de MySQL documentatie is de hoofdletter gevoeligheid van de tabel afhankelijk van het OS waarop MySQL draait.

Een oplossing is het gebruik van '--lower-case-table-names=1' bij het opstarten van mysqld waarmee mysql tabel en column benaming lowercase maakt. Maakt vervolgens een full backup van je database en verwijder daarna je database. Daarna kun je middels de backup de database weer opnieuw opbouwen. Alle tabelnamen worden dan lowercase aangemaakt (ook als create table MyTable ... wordt gebruikt).

Een andere snelle en eenvoudig oplossing is om MySQL onder windows te installeren.

If it isn't broken, fix it until it is..


  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 20-10 16:34
Ja maar de database is allemaal lowercase het gaat juist om de scriptjes waar af en toe hoofdletters in voor komen.

Dat met die links is misschien wel wat ;) Kijken of dat werkt..

Maar op den duur is het inderdaad de bedoeling dat overal lowercase software opkomt maar op dit moment is dit niet binnen korte tijd haalbaar..

[ Voor 20% gewijzigd door Black-Xjuh op 24-10-2007 17:05 ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
is er niet een of andere manier te bedenken waarom je de request opvangt en eerst converteert naar lowercase ofzo?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Niemand_Anders schreef op woensdag 24 oktober 2007 @ 14:43:
Volgens de MySQL documentatie is de hoofdletter gevoeligheid van de tabel afhankelijk van het OS waarop MySQL draait.

Een oplossing is het gebruik van '--lower-case-table-names=1' bij het opstarten van mysqld waarmee mysql tabel en column benaming lowercase maakt. Maakt vervolgens een full backup van je database en verwijder daarna je database. Daarna kun je middels de backup de database weer opnieuw opbouwen. Alle tabelnamen worden dan lowercase aangemaakt (ook als create table MyTable ... wordt gebruikt).

Een andere snelle en eenvoudig oplossing is om MySQL onder windows te installeren.
Dat is dus al eerder in het topic aangemerkt ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

...gaat om de scriptjes waar af en toe hoofdletter worden gebruikt...
Die SQL queries, lopen die via een SQL class of lopen ze via de goede oude mysql_query functies?
Als ze via een SQL class lopen, dan kun je die opdracht daar nog naar lowercase ombouwen.

Voor het ombouwen van de scriptjes naar lowercase heb ik trouwens ook een oplossing, maar dat vergt nogal wat. Dus dat is voor later zorg.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
BtM909 schreef op woensdag 24 oktober 2007 @ 15:15:
[...]

Dat is dus al eerder in het topic aangemerkt ;)
ik begreep daar uit dat de tabelnamen dan lowercase worden bij aanmaken, maar dat een "select * FROM HooFdLeTTerGevoeLigeTabel" dan een error gaat geven.... is dat ook zo? want ik bedoelde eigenlijk dat deze request-select dan afgevangen zou moeten worden...

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Edwardvb schreef op woensdag 24 oktober 2007 @ 16:15:
[...]

ik begreep daar uit dat de tabelnamen dan lowercase worden bij aanmaken, maar dat een "select * FROM HooFdLeTTerGevoeLigeTabel" dan een error gaat geven.... is dat ook zo? want ik bedoelde eigenlijk dat deze request-select dan afgevangen zou moeten worden...
Nee. Bij het aanmaken wordt de tabel altijd in lowercase aangemaakt (ongeacht de schrijfwijze). Zodra je een query uitvoert wordt eveneens opnieuw de tabel in lowercase gezet. Belangrijk is wel dat je de database opnieuw aanmaakt nadat de instelling is gedaan. Want anders kun je op harddisk niveau nog steeds een User.frm hebben en dat gaat select * from user alsnog niet matchen.

Opnieuw aanmaken van de database kan eenvoudig door een backup te importeren (de backup moet natuurlijk wel de tabel definities bevatten). Daarna is MySQL wat betreft tabel- en view namen hoofdletter ongevoelig.

@BtM909: In de eerdere opmerking betreffende de instelling werd niet aangegeven dat de database opnieuw aangemaakt moet worden, wat in dit geval erg belangrijk is.

If it isn't broken, fix it until it is..

Pagina: 1