我有一个 MySQL 数据库(在 Ubunutu 上运行),其中有一大堆名称采用驼峰命名法的表。例如,当我调用 show table;
时,我会得到类似的输出
+-----------------------------------+
| Tables_in_[schema] |
+-----------------------------------+
| tabHelloWorld |
| tabUserAccounts |
| tabHistory |
+-----------------------------------+
但是,当我尝试查询表时,例如 SELECT COUNT(*) FROM tabHistory
,我收到错误
ERROR 1146 (42S02): Table 'schema.tabhistory' doesn't exist
注意表名全部小写。查询 SELECT COUNT(*) FROM tabhistory
返回相同的错误。
我认为它与变量lower_case_table_names
有关。当前设置为 1,我假设 MySQL 不考虑表名的大小写。如果我设置 lower_case_table_names = 0
,则使用 FROM tabHistory
的查询将正常工作。问题是,如果我进行更改,MySQL 服务器正在运行其他数据库,而这些数据库将无法再访问。
我现在如何访问我的 table ?
最佳答案
听起来您在创建这些表后更改了 lower_case_table_names
的设置。这不是受支持的配置。当 lower_case_table_names=1
时,系统会在创建表名时自动将其转换为小写,但不会返回并修复以前存在的表。 manual说:
If you plan to set the
lower_case_table_names
system variable to1
on Unix, you must first convert your old database and table names to lowercase before stoppingmysqld
and restarting it with the new variable setting. To do this for an individual table, useRENAME TABLE
:RENAME TABLE T1 TO t1;
我认为你现在需要做的就是暂时将其设置回0
,重命名这些表,然后重新启动mysqld
。
关于MySQL - 无法查询现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40297071/