2016-06-15 5 views
0

Ich bin gerade dabei, mein Projekt in die Produktion zu bewegen und eine seltsame Situation zu finden. Die Datenbank wurde (leider) mit Objektnamen in Kleinbuchstaben erstellt. Jetzt handle ich auf dem Tisch mit all meinen über 100 gespeicherten Prozeduren/Funktionen, wobei ich nicht immer daran denke, dass ich Kleinbuchstaben für Tabellennamen verwenden sollte.mysql gespeicherte Prozedur findet keine Tabelle aufgrund von Case

Ich habe einen einfachen Test:

select * from mytable ; 

alle Datensätze in der Tabelle ergibt, während:

select * from Mytable ; 

gibt eine "Tabelle nicht vorhanden" Fehler.

Gibt es eine Lösung, die jemand vorschlagen könnte, eine nach der anderen durch jede gespeicherte Prozedur/Funktion zu gehen und den Fall der Tabellennamen zu korrigieren?

Vielen Dank im Voraus für jeden lebensrettenden Vorschlag.

+0

Willkommen bei der Softwareentwicklung, bei der die Bereitstellung in der Produktion nie so verläuft, wie Sie es sich wünschen. –

+0

Nun, mein lieber Freund, ich habe einige Erfahrung mit anderen DBMS (ORACLE, MS-SQL) und auf keinen Fall musste ich mich um Tabellennamen kümmern. – FDavidov

+0

ja ich auch nicht. Also mache ich alles kleingeschrieben. Funktioniert in jeder Umgebung wie ein Zauber. – Drew

Antwort

1

Vom MySQL documentation on cases in identifiers:

In MySQL entsprechen Datenbanken Verzeichnisse innerhalb des Daten Verzeichnis. Jede Tabelle innerhalb einer Datenbank entspricht mindestens einer Datei im Datenbankverzeichnis (und möglicherweise mehr, abhängig von der Speicher-Engine ). Trigger entsprechen auch Dateien. Folglich spielt die Groß-/Kleinschreibung des zugrunde liegenden Betriebssystems eine Rolle in der Groß-/Kleinschreibung von Datenbank-, Tabellen- und Triggernamen.

Ich würde wahrscheinlich die Zeit nehmen, um alles in Kleinbuchstaben zu machen, weil es dir Kopfschmerzen auf der ganzen Linie ersparen wird. Wenn Sie einen Client mit einem anständigen Editor wie MySQL Workbench haben, dann können Sie diese ersetzen mit einem schnellen finden und ersetzen.

EDIT:

Gemäß der Dokumentation, können Sie versuchen, den lower_case_table_names Systemvariable auf 1 gesetzt, das wird:

Tabellennamen in Klein Vergleichen auf der Festplatte und Namen gespeichert sind, nicht Fall empfindlich. MySQL konvertiert alle Tabellennamen in Speicher und Lookup in Kleinbuchstaben. Dieses Verhalten gilt auch für Datenbanknamen und Tabellenaliase.

Dies könnte Ihr Problem lösen, wenn die gesamte Tabelle mit Kleinbuchstaben auf der Festplatte erstellt wurde.

+0

Hummmm. Ich hatte andere Hoffnungen ... Wie erwähnt, gibt es mehr als 100 gespeicherte Prozeduren/Funktionen. – FDavidov

+0

Ich aktualisierte meine Antwort mit mehr Informationen aus der Dokumentation. –

+0

Danke @ gr1zzlybe4r für Ihre Kommentare. Soweit ich weiß, kommt es darauf an, wie das Betriebssystem funktioniert (Groß-/Kleinschreibung bei Dateinamen JA/NEIN). Selbst wenn ich von MySQL verlangen könnte, nach einer Tabelle zu suchen, ungeachtet des Falls, könnte dies zu einer Menge von I/Os gegenüber der Platte führen. Ich denke, dass es am besten (wenn auch sehr schmerzhaft) sein wird, den gesamten Code durchzugehen und sicherzustellen, dass Tabellennamen in Kleinbuchstaben geschrieben sind. – FDavidov

Verwandte Themen