【问题标题】:MySql changed lower_case_table_names now i can't select tablesMySql 更改了 lower_case_table_names 现在我无法选择表
【发布时间】:2016-06-18 05:47:33
【问题描述】:

我做了this 以便能够创建大写表,现在当我尝试更改、选择或对大写类执行任何操作时出现错误,因为它会查找它的小写版本

SELECT cust_id FROM Customer LIMIT 0, 1000
Error Code: 1146. Table 'toys.customer' doesn't exist

我正在使用模式“玩具”,它有一个我正确创建的 Customer

【问题讨论】:

  • 为你的表名尝试反引号
  • 顺便说一句,你重启你的mysql服务器了吗?
  • 是的,我重新启动了,否则我将无法创建大写表格,我只是尝试创建一个小写表格来测试相同的东西,它在那里工作
  • 在 my.cnf 中做 lower_case_table_names=2 ,使用大写。
  • 这个查询返回什么SELECT @@lower_case_table_names

标签: mysql


【解决方案1】:

在 my.cnf 中执行 lower_case_table_names=2 ,以使用大写字母

来自Mysql手册,关于lower_case_table_names的值:

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

1 表名以小写形式存储在磁盘上,名称比较不区分大小写。 MySQL 在存储和查找时将所有表名转换为小写。此行为也适用于数据库名称和表别名。

2 表和数据库名称使用 CREATE TABLE 或 CREATE DATABASE 语句中指定的字母大小写存储在磁盘上,但 MySQL 在查找时会将它们转换为小写。名称比较不区分大小写。这仅适用于不区分大小写的文件系统! InnoDB 表名以小写形式存储,如 lower_case_table_names=1。

在 Unix 上,lower_case_table_names 的默认值为 0。在 Windows 上,默认值为 1。在 OS X 上,默认值为 2。

编辑 my.cnf 值后不要忘记重新启动 MySQL。

【讨论】:

  • “lower_case_table_names=2”在文件“my.ini”的末尾被编辑,在这个目录“C:\ProgramData\MySQL\MySQL Server 5.7”中,我使用的是 windows 10。我从服务重新启动 MySQL,在我以这种方式重新启动之前它没有工作,现在我可以用大写创建,但我不能修改它们或只从脚本中使用它们
  • 对不起,我错过了你正在使用 Windows。
  • 你可以从命令行访问mysql吗?尝试那里查询>>显示变量,如'%case_table_names%';它向你展示了什么?
  • 我现在正在学习MySql,我可以访问mysql命令行,然后我输入“查询”,我有“->”箭头,然后我可以输入一个输入,我怎样才能显示'%case_table_names %' 变量?
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
相关资源
最近更新 更多