MySQL - 无法查询现有表

MySQL - Cannot query existing tables

我有一个 MySQL 数据库(在 Ubunutu 上是 运行),其中有一大堆 table 的名称以驼峰式命名。例如,当我调用 show tables; 时,我得到类似

的输出
+-----------------------------------+
| Tables_in_[schema]                |
+-----------------------------------+
| tabHelloWorld                     |
| tabUserAccounts                   |
| tabHistory                        |
+-----------------------------------+

但是,当我尝试查询 table,例如 SELECT COUNT(*) FROM tabHistory 时,我收到错误消息

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

注意 table 名称全部小写。查询SELECT COUNT(*) FROM tabhistoryreturns一样的错误。

我假设它与变量lower_case_table_names有关。它目前设置为 1,我假设 MySQL 不考虑 table 名称的情况。如果我设置 lower_case_table_names = 0,则带有 FROM tabHistory 的查询正在运行。问题是 MySQL 服务器是 运行 如果我进行更改,其他数据库将不再可访问。

现在如何访问我的 table?

你试过用 table 名字上的引号吗?我不是特别确定,但使用引号可能会有所帮助,因为它在 PostgreSQL

中确实如此
SELECT COUNT(*) FROM 'tabHistory';

听起来您在创建这些 table 后更改了 lower_case_table_names 的设置。这不是受支持的配置。当 lower_case_table_names=1 时,系统会在创建 table 名称时自动将其转换为小写,但不会返回并修复以前存在的 table。 manual 表示:

If you plan to set the lower_case_table_names system variable to 1 on Unix, you must first convert your old database and table names to lowercase before stopping mysqld and restarting it with the new variable setting. To do this for an individual table, use RENAME TABLE:

RENAME TABLE T1 TO t1;

我认为你现在需要做的是暂时将其设置回0,重命名这些table,然后重新启动mysqld