MySQL - 无法查询现有表

时间:2016-10-28 02:22:10

标签: mysql sql lowercase

我有一个MySQL数据库(在Ubunutu上运行),其中包含一大堆带有camelcase名称的表。例如,当我调用show tables;时,我得到一个类似

的输出
+-----------------------------------+
| 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服务器依次运行的其他数据库将无法访问。

我现在如何访问我的表格?

2 个答案:

答案 0 :(得分:1)

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

  

如果您打算在Unix上将lower_case_table_names系统变量设置为1,则必须先将旧数据库和表名转换为小写,然后再停止mysqld并使用新的重新启动它变量设定。要对单个表执行此操作,请使用RENAME TABLE

RENAME TABLE T1 TO t1;

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

答案 1 :(得分:0)

您是否尝试过使用表名引号?我不是特别确定,但使用引号可能会有所帮助,因为它确实在PostgreSQL中有用

SELECT COUNT(*) FROM 'tabHistory';