2016-10-28 2 views
0

Ich habe eine MySQL-Datenbank (läuft auf Ubunutu) mit einer ganzen Reihe von Tabellen mit Namen in Camelcase. Zum Beispiel, wenn ich show tables; nennen erhalte ich eine Ausgabe wieMySQL - Kann vorhandene Tabellen nicht abfragen

, aber wenn ich versuche, eine Tabelle abzufragen, zB SELECT COUNT(*) FROM tabHistory, erhalte ich die Fehler

ERROR 1146 (42S02): Table 'schema.tabhistory' doesn't exist 

Hinweis der Tabellenname in Kleinbuchstaben. Die Abfrage SELECT COUNT(*) FROM tabhistory gibt denselben Fehler zurück.

Ich nehme an, es hat etwas mit der Variablen lower_case_table_names. Es ist derzeit auf 1 gesetzt, wobei ich annahm, dass MySQL den Fall von Tabellennamen nicht berücksichtigt. Wenn ich lower_case_table_names = 0 einstelle, funktioniert die Abfrage mit FROM tabHistory. Das Problem ist, dass auf dem MySQL-Server andere Datenbanken laufen, auf die wiederum nicht mehr zugegriffen werden kann, wenn ich diese Änderung mache.

Wie kann ich jetzt auf meine Tabellen zugreifen?

+0

http://stackoverflow.com/questions/4260546/mysql-table-does-not-exist-error-but-it-does-exist oder http://stackoverflow.com/questions/4260546/mysql-table -does-not-exist-error-but-it-does-exist –

+1

Wenn Sie 'lower_case_table_names = 1' verwenden, sollten Sie keine Großbuchstaben in Tabellennamen eingeben. Sie müssen diese Tabellen umbenennen. – Barmar

Antwort

1

Es klingt wie Sie die Einstellung von lower_case_table_names nach der Erstellung dieser Tabellen geändert. Dies ist keine unterstützte Konfiguration. Wenn lower_case_table_names=1, das System konvertiert automatisch die Tabellennamen in Kleinbuchstaben, wenn sie erstellt werden, aber es geht nicht zurück und repariert zuvor vorhandene Tabellen. Die manual sagt:

Wenn Sie die lower_case_table_names Systemvariable 1 auf Unix setzen möchten, müssen Sie zunächst die alte Datenbank und Tabellennamen konvertieren, bevor in Kleinbuchstaben mysqld stoppen und es mit der neuen variablen Einstellung neu zu starten. Um dies für eine einzelne Tabelle, verwenden RENAME TABLE:

RENAME TABLE T1 TO t1; 

Was ich glaube, Sie jetzt tun müssen, festgelegt ist es zurück zu 0 vorübergehend, benennen Sie diese Tabellen, starten Sie mysqld.

0

Haben Sie es mit den Anführungszeichen für Tabellennamen versucht? Ich bin nicht besonders sicher, aber unter Verwendung von Anführungszeichen helfen könnten, wie es sicher tut in PostgreSQL

SELECT COUNT(*) FROM 'tabHistory'; 
+0

MySQL verwendet Backticks, um Tabellen- und Spaltennamen zu zitieren. – Barmar

+0

Hat nicht funktioniert, leider. – Christian

+0

Warum nicht mit Backticks dann nach @barmar versuchen? – Pragun

Verwandte Themen