【问题标题】:Mysql table name not working in uppercaseMysql 表名不能大写
【发布时间】:2013-12-27 06:27:25
【问题描述】:

我需要改变mysql是接受大写和小写的表名,

select * from users

上面的查询工作正常,但下面的查询不工作,

select * from USERS 

【问题讨论】:

  • 表名在任何区分大小写的文件系统上都是区分大小写的。要么更改 FS(或更可能的操作系统),要么使用正确的标识。确实,您应该使用正确的标识符。否则很奇怪/令人困惑。
  • 请查看documentation。这因操作系统和文件系统而异。
  • 我强烈建议始终使用小写名称。

标签: mysql


【解决方案1】:

这取决于您的系统(主要值是 Unix、Windows 和 Mac OS)。

您需要将系统变量“lower_case_table_names”设置为 1 或 2,以使您的数据库不区分大小写。

SET lower_case_table_names=1;

SET lower_case_table_names=2;

点击Mysql.comhere

【讨论】:

  • 这个答案非常具有误导性。此变量仅用于Create Table 语句。
  • 谨防错误答案。 lower_case_table_names=2,Documnetation 说“表和数据库名称使用 CREATE TABLE 或 CREATE DATABASE 语句中指定的字母大小写存储在磁盘上,但 MySQL 在查找时将它们转换为小写。名称比较不区分大小写。这仅适用于文件系统不区分大小写!InnoDB 表名以小写形式存储,如 lower_case_table_names=1。"
【解决方案2】:

windows = 小写。

我不建议将 mysqld 配置更改为 0 或 2。

  • lower_case_table_names = 0(比较区分大小写) 如果设置为 0,则按指定存储表名,并且比较区分大小写。

  • lower_case_table_names = 1(比较不区分大小写) 如果设置为 1,则表名以小写形式存储在磁盘上,并且比较不区分大小写。

  • lower_case_table_names = 2(比较区分大小写) 如果设置为 2,则表名存储为给定但以小写形式进行比较。

如果要改的话,在windows一般mysql目录下找到my.ini文件,在wamp中检查bin目录并添加“lower_case_table_names = 0”或“lower_case_table_names = 2”

此选项也适用于数据库名称和表别名。 参考https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names

【讨论】:

    【解决方案3】:

    表和数据库名称使用CREATE TABLECREATE DATABASE 语句中指定的字母大小写存储在磁盘上。名称比较区分大小写。如果您在具有不区分大小写文件名的系统(例如 Windows 或 Mac OS X)上运行 MySQL,则不应将此变量设置为 0。如果您在不区分大小写的文件系统上使用 --lower-case-table-names=0 将此变量强制为 0,并使用不同的字母大小写访问 MyISAM 表名,则可能会导致索引损坏。

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

    【讨论】:

      【解决方案4】:

      数据库和表名在 Windows 中不区分大小写,在大多数 Unix 中区分大小写。

      In MySQL, databases correspond to directories within the data directory. 
      Each table within a database corresponds to at least one file within the database
      directory. Consequently, the case sensitivity of the underlying operating system 
      plays a part in the case sensitivity of database and table names.
      

      阅读部分:8.2.2. Identifier Case Sensitivity

      但要解决您的问题,您可以创建一个表格视图,将名称设置为不同的大小写。但是接下来users会发生什么

      【讨论】:

        【解决方案5】:

        一个选项可以根据您的操作系统需要将所有表名设置为较​​低或较高。

        select concat('rename table ', table_name, ' to ' , lower(table_name) , ';') from information_schema.tables where table_schema = 'your_schema_name';
        

        复制所有行并执行它们:)

        【讨论】:

          【解决方案6】:

          我花了很长时间试图解决这个问题,所有其他 SQL 查询在我的系统上都没有问题。

          事实证明,我无意中将我正在寻找的新表添加到不同的数据库中(在不同的项目中工作)。

          我建议您仔细检查您是否正在寻找正确的表、正确的数据库、正确的域...祝您好运!

          【讨论】:

            猜你喜欢
            • 2015-07-30
            • 2017-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-09
            • 2010-11-13
            • 1970-01-01
            • 2017-01-31
            相关资源
            最近更新 更多