lower_case_table_names -> mysql startet nicht

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

lower_case_table_names -> mysql startet nicht

Postby MichT » 02. December 2016 11:16

Habe in my.ini
unter[mysqld]
lower_case_table_names = 0
eingetragen.

Danach startet MySQL nicht mehr.
Wenn ich den Wert 1 oder 2 eintrage startet der Dienst.

In der früheren Versionen von xampp 1.8.3 gibt es damit keine Probleme.
Ich verwende win7 und XAMPP Version 7.0.13
Das CMS mit dem ich arbeite verwendet camelcased tablenames, ich muss deshalb Großbuchstaben für Tabellen enablen.

Hat jemand eine Idee?
MichT
 
Posts: 4
Joined: 29. November 2016 10:59
XAMPP version: xampp-win32-7.0.13-0-VC14
Operating System: WIN7_PRO

Re: lower_case_table_names -> mysql startet nicht

Postby Nobbie » 02. December 2016 13:47

Steht denn gar nichts im Error Log? Ich würde vermuten, dass MySQL seine eigenen Tabellen ("MySQL" usw.) nicht findet, weil sie auf der Platte nicht so geschrieben sind wie im Select. Vielleicht kann man die Tabellen extern umbenennen? Oder intern mit "ALTER TABLE..." und anschließend erst diese Option setzen?

Ich kannte den Begriff "camel cased" überhaupt nicht und habe danach gegoogled, das ist hier ist der allererste Treffer den ich bekommen habe (eigentlich ein Trauerspiel für dieses CMS):

http://smyck.net/2011/06/21/camel-case- ... -bad-idea/

Da hat der Autor offensichtlich recht....

P.S.: Warum es früher keine Probleme gab - ich kann nur raten. Xampp hat ungefähr auch bis Release 1.8.3 (muss nicht genau stimmen) in MySQL die Defaulteinstellung MYISAM für Tabellen benutzt. Da werden die Tabellen als Dateien auf der Festplatte unterhalb von Ordnern angelegt (die Ordner sind die Datenbanken). Dann hat Oracle (die haben ja damals MySQL aufgekauft) entschieden, die Engine INNODB mehr zu pushen und irgendwann damals wurde der Default von MYISAM auf INNODB geändert. Bei InnoDB sieht die Verwaltung ganz anders aus, die Datenbanken stehen in proprietären (großen) Dateien a la "ibdata1". Welche Wirkung hat das auf diese Einstellung der Tabellennamen?? Es sieht aber so aus, als wenn die lebenswichtige Datenbank "mysql" immer noch als MYISAM vorliegt, jedenfalls finde ich so einen Ordner und da sind auch die entsprechenden Dateien (User und Tables usw.) drin, bei mir alles in Kleinbuchstaben (allerdings auf einem Linuxrechner). Das ist ja das nächste Problem (und das ist ja auch in dem Link angesprochen), dass unter Linux die Schreibweise des Tabellennamens wichtig ist, während Windows normalerweise non-case-sensitive ist. Aber irgendwo an dieser Stelle würde ich vermuten, geht der Startup in die Hose. Kannst ja mal probieren, die ganzen Tabellen und den Ordner MySQL umzubenennen.

P.P.S.: Läuft das CMS (welches überhaupt??) denn nicht, wenn man diese Einstellung einfach mal nicht vornimmt? Da WIndows ja nicht case-sensitiv ist, müßte doch die Defaulteinstellung in jedem Fall funktionieren?! Das einzige Problen sehe ich da allenfalls, wenn Tabellen mit gleichem Namen (aber verschiedener groß/klein Schreibung) angelegt werden, aber das halte ich sowieso für einen derben Fehler. Das macht normalerweise kein Mensch.
Nobbie
 
Posts: 9760
Joined: 09. March 2008 13:04

Re: lower_case_table_names -> mysql startet nicht

Postby MichT » 03. December 2016 10:38

Vielen Dank für diese ausführliche Antwort.
Es gibt also keinen schnellen Fix und das ist eine wichtige Orientierungshilfe.
Heißt im Klartext, dass ich weiter mit der alten Version arbeite.
Dass ein cms wie concrete5 mit Großbuchstaben in den Tabellen arbeitet ist ein Unding und wurde von vielen Usern bereits moniert.
Die Macher gehen aber nicht drauf ein, alle Datenbankabfragen crashen, wenn man Tabellen mit kleinen Buchstaben hat.

Nochmals vielen Dank!
MichT
 
Posts: 4
Joined: 29. November 2016 10:59
XAMPP version: xampp-win32-7.0.13-0-VC14
Operating System: WIN7_PRO

Re: lower_case_table_names -> mysql startet nicht

Postby Nobbie » 03. December 2016 12:02

MichT wrote:Es gibt also keinen schnellen Fix und das ist eine wichtige Orientierungshilfe.


Meiner Meinung nach schon und den hatte ich auch vorgeschlagen: NICHT diesen Eintrag in my.ini schreiben. Das steht übrigens auch original so in der MySQL Doku:

http://dev.mysql.com/doc/refman/5.7/en/ ... ivity.html

You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or OS X)


Wieso hast Du das überhaupt so versucht? Diesen Wert auf 0 zu setzen hat unter Windows keinen Sinn und führt allenfalls zu Problemen. Ich würde an Deiner Stelle Xampp "out of the box" benutzen und dort dann concrete5 installieren. Ich verstehe auch nicht, was heißt denn "benutzen Großbuchstaben in Tabellen"?? Wenn man unter Windows mit MySQL arbeitet, dann kann man im CREATE TABLE Statement und auch nachher beim SELECT einen Tabellennamen angeben, wo vollkommen egal ist, welche Buchstaben groß oder klein sind, also beispeilsweise solche Selects machen überhaupt kein Problem:

SELECT * FROM myUsER ...

Und es ist auch gar kein Problem, wenn man die Tabelle "myuser" (hier schreibe ich sie klein, macht keinen Unterschied) vorher so angelegt hat:

CREATE TABLE MYUSER

oder auch

CREATE TABLE myuser

oder

CREATE TABLE MYuSer ...


Das ist alles egal, intern wird bei jedem Statement der Tabellennamen auf Kleinbuchstaben umgesetzt und wie die Tabelle auf der Festplatte heißt (also da befindet sich im Falle von INNODB pro Tabelle eine Datei mit diesem Namen) spielt auch überhaupt keine Rolle, was die Klein/Großschreibung betrifft. Deswegen verstehe ich das Problem gar nicht erst. Auf Linux sieht das anders aus, aber das können wir im Fall der Fälle immer noch besprechen. Was spricht also dagegen, diese ohnehin falsche Option nicht in my.ini zu verwenden (der Defaultwert beträgt 1)?

P.S.: Ich habe gerade auf der Seite von concrete5 einen Kommentar geschrieben, unter dem (recht veralteteten weil von 2012) Beitrag des admins, man solle unter Windows diesen Wert auf 0 setzen, dass das falsch ist nicht und empfohlen werden kann. Ich habe die Doku von MySQL dazu zitiert und darauf verwiesen, dass der Wert 0 für case-insensitive System (wie Windows und OSX) zu Problemen führen kann (bis dahin, dass die Index Tabellen zerstört werden). Ich habe leider das Gefühl, dass (wieder einmal) bei concrete5 eine Horde junger Script-Kiddies programmiert (so wie es bei den meisten CMS der Fall ist, WordPress ist auch grausam zusammengehackt), die unter gefährlichem Halbwissen und mangelnder Erfahrung verfügen. Dieser "Tipp" ist jedenfalls absoluter Müll und unter fat32 geht selbst die zu Grunde liegende Idee nicht, weil fat32 überhaupt keine Groß/Kleinschreibung kennt (bei NTFS kann man wenigstens in der Registry ein entsprechendes Verhalten vereinbaren). Ein schlau klingender Schnellschuss mit verheerenden Folgen. Ich bleibe dabei, probiere es einfach so, concrete5 unter Windows zu installieren.

P.P.S.: Ich habe mir concrete5 Version 8.0.0 mal heruntergeladen und anschießend unter Linux Mint und Xampp 7.0.9 (also eine Version vor 7.0.13, was ganz sicher keine Rolle spielt) ohne jegliche Anpassung der Xampp od. MySQL Konfiguration installiert. Klappte auf Anhieb, inkl. einer Demo-Installation läuft das hier bei mir. Kann ich gerne auch mal auf WIndows versuchen, aber da ist eher noch wahrscheinlicher, dass das klappt, denn im Zweifel sind die Dateinamen unter Linux kritisch, aber nicht unter WIndows. Ich muss mal schauen, ob ich eine WIndows Xampp Installation habe, sonst installiere ich vielleicht noch eine, aber ich bin mir sicher, dass das alles kein Problem ist. Also einfach Xampp installieren und dann ein einfach concrete5 installieren, da gibt es nichts besonderes zu beachten. Vergiß den Käse mit dem camel case usw.

Und wenn es unter Windows dennoch wirklich Probleme gibt, dann installiere Dir ein Linux (kostet auch nichts), installiere da den ganzen Krempel und dann bist auch auf der sicheren Seite, dass das nachher auch im Internet läuft, denn dort wird man meistens sowieso einen Linux Server vorfinden.
Nobbie
 
Posts: 9760
Joined: 09. March 2008 13:04

Re: lower_case_table_names -> mysql startet nicht

Postby MichT » 03. December 2016 18:54

Danke, dass Du Dich derartig ausführlich mit meinem Problem beschäftigst.

Was passiert mit einem Database-Dump, den Du unter win-xampp (also lokal) generierst und dann unter Linux (in meinem Fall der Webserver) versuchst, einzuspielen?
Die Tabellennamen sind im Dump klein geschrieben, während auf dem Linux-Server die Tabellennamen Großbuchstaben enthalten.
MichT
 
Posts: 4
Joined: 29. November 2016 10:59
XAMPP version: xampp-win32-7.0.13-0-VC14
Operating System: WIN7_PRO

Re: lower_case_table_names -> mysql startet nicht

Postby Nobbie » 04. December 2016 01:34

Probiere es aus, dann weißt Du es, mehr kann ich auch nicht machen. Da im Dump aber explizit die CREATE TABLE Statements als Text drin stehen, werden die Tabellennamen so angelegt, dass es funktioniert. Egal ob groß oder klein oder gemischt (spielt ja eh keine Rolle, es muss nur funktionieren).

Und sollte es dort dennoch Probleme geben, dann benutzt man eben Windows Xampp nicht, sondern installiert (wie oben ausgeführt) von vorneherein alles auf Linux. Und dass das funktioniert, habe ich sogar schon getestet. Windows ist für mich sowieso kein brauchbares Serverumfeld. Wozu überhaupt Windows?
Nobbie
 
Posts: 9760
Joined: 09. March 2008 13:04

Re: lower_case_table_names -> mysql startet nicht

Postby MichT » 04. December 2016 10:08

Danke, Du hast mir sehr geholfen!
MichT
 
Posts: 4
Joined: 29. November 2016 10:59
XAMPP version: xampp-win32-7.0.13-0-VC14
Operating System: WIN7_PRO

Re: lower_case_table_names -> mysql startet nicht

Postby Nobbie » 04. December 2016 12:29

Ich habe mir das auch nochmal angeschaut, das ist schon skurril. Denn die Programmierung mit diesen Tabellennamen ist vollkommen normal, in den Selects werden die Tabelleneigenschaften (KundenAdresse oder so, nur als Beispiel) mit Großbuchstaben abgegrenzt, eine sehr überlegte und gute Form. Denn stattdessen "kundenadresse" zu nehmen oder "KUNDENADRESSE" sieht doch schrottig aus und ist schlecht lesbar. Bis dahin ist alles im Lot.

Nun ist es so, dass die Tabellennamen sich auch auf den Festplatten wiederfinden, als Dateinamen. Und da gibt es bisweilen ein Problem (aber eben sowieso nicht unter Windows), dass diese Dateinamen von Groß/Kleinschreibung abhängen. Um diesem Problem aus dem Weg zu gehen, haben sich die MySQL Entwickler eine wunderbare Logik einfallen lassen, dass sie Dateien auf der Festplatte einfach immer in Kleinbuchstaben schreiben, aber wenn ein Select auf KundenAdresse erfolgt, dann wird dieser Tabellenname nicht 1:1 benutzt, sondern auch erst in Kleinbuchstaben umgesetzt (intern) und dann wird die Anweisung ausgeführt. Bis dahin auch alles im Lot.

Und dann hat sich (warum auch immer) ein MySQL Entwickler einfallen lassen, man könnte ja eine Laufzeitoption einführen, die auf Systemen, wo Groß/Kleinschreibung eine Rolle spielt, die Schreibweise der Tabellen 1:1 an das Betriebssystem durchzureichen, mit der Folge, dass auch die Dateinamen dann nicht mehr unbedingt nur klein sind, sondern so, wie es im CREATE Table Statement angegeben ist. So weit auch noch im Lot, aber schon ein Schritt in eine gefährliche Richtung.

Und jetzt kommt der Fehler: da arbeitet offensichtlich ein Programmierer bei concrete5, der dieses (eigentlich geniale) Konzept von MySQL vollkommen falsch versteht und schreibt dann in der Installationsanleitung so eine total wilde Empfehlung hinein, man solle unter Windows (ausgerechnet auch noch da, das ist wirklich total kaputt!) doch diese Option auf 0 setzen, weil man doch Groß/Kleinschreibung "benutzt" (in vollkommenem Unverständnis, dass diese Groß/Kleinschreibung natürlich NICHT den Sinn hat, irgendwelche Dateinamen zu beeinflussen, sondern um den Code lesbarer zu machen) um so zu erreichen, dass (hoffentlich) die Dateien auf der Festplatte nachher genauso heißen, wie im Select. Was natürlich totaler Hirnriss ist und was auch nie gewollt oder Zweck dieser Selects ist. Da hat einfach ein Programmierer bei concrete5 ein totales Verständnisproblem über dieses wunderbare MySQL-Verhalten (welches per Default eben genau das ermöglicht, dass man in den Select schreiben kann, was man will und es spielt keine Rolle, auf welchem Betriebssystem man arbeitet, die Selects werden immer nicht-case-sensitiv abgearbeitet - genau was man will - sondern es spielt keine Rolle, ob "Kunde" groß oder klein geschrieben wird, auch auf Systemen, wo das normalerweise Probleme geben KÖNNTE, weil dort Dateien unterschieden werden, wenn sie sich in Groß/Kleinschreibung unterscheiden) und das geht so weit, dass er eine Empfehlung ausschreibt, die so grottenfalsch ist, dass sie selbst mit der MySQL Dokumentation kollidiert (s.o.), die selbstverständlich darauf hinweist, dass speziell unter Windows und OSX das Setzen dieser Option vollkommenn sinnlos ist und im Zweifel sogar Schaden anrichten kann...

So kommt es, dass concrete5 jetzt den (sowieso nicht verständlichen) Ruf hat, man würde unsinnig große Buchstaben in Tabellennamen verwenden - was natürlich weder unsinnig noch unüblich ist, aber in der Doku zu concrete5 ist eine dermaßene "Gurke" drin (nämlich genau diese), dass dadurch bei weniger versierten Anwendern ein riesiges Verständnisproblem erzeugt wird und eine vollkommen falsche Vorstellung darüber, was der technische Hintergrund ist. Das ist wirklich grausam! Also vergiß den ganzen Müll und benutze Xampp (oder grundsätzlich MySQL) einfach so, wie es fertig daher kommt: da funktioniert alles, egal auf welcher Umgebung und egal von wo nach wo man die Datenbanken portiert. Die Probleme entstehen erst dann, wenn man diese verheerend falsche Anleitung nachzuvollziehen versucht.
Nobbie
 
Posts: 9760
Joined: 09. March 2008 13:04

Re: lower_case_table_names -> mysql startet nicht

Postby Tine » 06. December 2016 22:43

Hallo,

was ist denn nun die Lösung des Problems?

Meine Xampp-Version: 7.0.9
Betriebssystem: Windows 10

Mein Fall:
Ich habe eine DB importiert, welche einen Tabellennamen trägt, der kleingeschrieben ist. Ein anderes Programm, an mehreren Systemen installiert möchte auf diese Tabelle zugreifen, aber kann des nur, wenn sie korrekt geschrieben ist - und das mit einem Großbuchstaben im Tabellennamen.

Es muss doch irgendwie bei MySQL möglich sein den Tabellennamen mit Großbuchstaben zu verwenden. Die Herangehensweise mit der Änderung der my.ini (lower_case_table_names = 0) scheint unter Windows ja nicht der richtige weg zu sein, wenn ich Euch richtig verstanden habe...

Hat jemand einen Vorschlag, wie ich aus der Nummer rauskomme? Und bitte nicht schreiben: auf LINUX wechseln - das System ist beim Kunden installiert und 40 PCs greifen auf die Datenbank zu - ich muss mit Windwows arbeiten. Beim Kunden läuft noch Windows 7, ist nur ne Frage der Zeit, bis auch hier auf Windows10 umgestellt werden muss.

Ich hoffe, auf sinnvolle Antworten aus dem Support-Forum,
MfG, Tine
Tine
 
Posts: 1
Joined: 06. December 2016 22:31
XAMPP version: 7.0.9
Operating System: windows 10


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 2 guests