我有一个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服务器依次运行的其他数据库将无法访问。
我现在如何访问我的表格?
答案 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';