【问题标题】:mysql case sensitive table names in queries查询中的mysql区分大小写的表名
【发布时间】:2012-10-05 10:01:30
【问题描述】:

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

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

【问题讨论】:

  • dev.mysql.com/doc/refman/5.0/en/… - TL;DR:没有设置来控制这一点,标识符名称区分大小写取决于操作系统和文件系统。我强烈建议对所有数据库、表和列名使用全部小写 - 这样更容易处理。
  • 取决于。是否有任何超级对象或者它是程序性的?
  • 不,这是简单的 php 代码,很旧。我得到了这个项目非常粗略的代码。不,我正在尝试在某种程度上简化它。

标签: php mysql case-sensitive


【解决方案1】:

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

select * from my_table

会成功

select * from MY_TABLE

会因为某种表不存在消息而失败。

如果你想让两个语句都成功,你需要把下面这行 lower_case_table_names = 1 在您的 /etc/my.cnf 或您保留 MySQL 配置的任何地方。请务必将系统变量添加到配置文件的 [mysqld] 部分。

【讨论】:

    【解决方案2】:

    你需要检查mysql标识符:

     lower_case_table_names
    

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

    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,其中 字母大小写很重要,如果字母大小写,它们就不起作用 不正确。

    【讨论】:

    • 选中:lower_case_table_names 设置为 0
    • 点击链接找出您需要的价值。该值取决于您使用的操作系统。
    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多