MySQL - 无法查询现有表

标签 mysql sql lowercase

我有一个 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 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,重命名这些表,然后重新启动mysqld

关于MySQL - 无法查询现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40297071/

相关文章:

mysql - 仅前 x 个字符有条件替换

mysql - 在 MySQL Group 函数中排序

mysql - 通过最大列值选择每个唯一列值限制一行

join - 如何在 BigQuery 中使用小写维度进行联接

php - Mysql/PHP - 账户图表 - 父账户中的汇总

mysql - 从 MySQL 中的数字列表中选择一列

mysql - 更新从同一查询中的 SELECT 检索的结果

mysql - 将 Select 语句转换为另一个 select To Eloquant

c - 用于从 char 类型中减去的简单 C 语法,小写

string - 小写 Racket 中的整个字符串