查询中的mysql区分大小写的表名

时间:2012-10-15 12:14:41

标签: php mysql case-sensitive

我有php代码,其中数据库表名的第一个字母是大写字母,但数据库中的表名都是小写的。

我应该使用什么全局设置,这样就不需要在每个代码文件中更改用于创建与数据库相同的表名的表名。

2 个答案:

答案 0 :(得分:3)

默认情况下,Linux上的MySQL元数据区分大小写。那就是如果你有一个表my_table,小写,那么

select * from my_table

将成功

select * from MY_TABLE

将失败,某种表不存在消息。

如果您希望两个语句都成功,则需要输入以下行 lower_case_table_names = 1 在/etc/my.cnf或您保存MySQL配置的任何地方。请务必将系统变量添加到配置文件的[mysqld]部分。

答案 1 :(得分:1)

您需要检查mysql标识符:

 lower_case_table_names

您需要检查位于my.ini目录中的mysql文件。有关源和目标操作系统的更多详细信息,请检查:

http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

从上面的网址中提取的内容:

  

如果您只在一个平台上使用MySQL,则通常不会   将lower_case_table_names变量从其默认值更改。   但是,如果要传输表,可能会遇到困难   在文件系统区分大小写不同的平台之间。对于   例如,在Unix上,您可以有两个名为my_table和的表   MY_TABLE,但在Windows上,这两个名称被认为是相同的。至   避免数据库或信件箱引起的数据传输问题   表名,你有两个选择:

Use lower_case_table_names=1 on all systems. The main disadvantage with this is that when you use SHOW TABLES or SHOW DATABASES, you do
     

没有看到原始信件中的名字。

Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows. This preserves the lettercase of database and table names.
     

这样做的缺点是你必须确保你的陈述   总是用正确的方式引用你的数据库和表名   Windows上的字母。如果您将语句转移到Unix,那么   lettercase很重要,如果是lettercase,它们不起作用   不正确。