MySql两个表相同名称不同的外壳

时间:2014-09-23 15:50:39

标签: mysql

我开始害怕,因为我似乎有一张幻影表......但是如果我运行这两个查询,它就不会出现在Navicat中:

SELECT count(*) from messages;

SELECT count(*) from Messages;

我得到两组不同的结果!

然而,奇怪的是如果我运行show tables我只看到一个名为messages的表

这吓坏了我,因为我不知道数据是否会错误地投入到错误的表Messages

有没有人见过这个?

我不确定该怎么做。

按要求

运行show table status like 'messages';

之后

messages InnoDB 10 Compact 224163 222 49889280 0 53608448 8388608 208683 2014-08-23 20:16:11 latin1_swedish_ci

再次更新

我跑了两个人:

SELECT * FROM information_schema.tables WHERE table_name = 'Messages';

SELECT * FROM information_schema.tables WHERE table_name = 'messages';

它显示了具有不同记录数的多个记录

可怕的部分是我对数据库中的其他表运行相同的查询,并且我使用相同技术测试的所有其他表都存在相同的问题。

好像我每张桌子都有两个副本,一个带有大写第一个字母,另一个带有小写字母,似乎小写字母是"最新的"两个。

1 个答案:

答案 0 :(得分:1)

我建议您使用information_schema.tables的查询检查表格。

SELECT * FROM information_schema.tables WHERE table_name = 'Messages';

还要考虑有人创建视图的可能性。

SELECT * FROM information_schema.views  WHERE table_name = 'Messages';

有一个影响的MySQL变量 lower_case_tables_names ;此变量的默认值取决于操作系统(Linux,Windows,OS X)。 (我们在MySQL系统上明确设置为1.)根据参考手册:

"如果您使用的是InnoDB表,则应在所有平台上将此变量设置为1,以强制将名称转换为小写。"

(本手册的这一部分并未描述您在InnoDB表中观察到的行为,如果此变量设置为1以外的其他值。)

参考:http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_lower_case_table_names