lower_case_table_names设置为2,Workbench仍然不允许使用小写数据库名称

时间:2015-02-16 11:37:07

标签: mysql mysql-workbench

我在Windows 7 64位上安装了MySql Workbench 6.2 MySql version 5.6

我想在我的数据库名称和表名中使用大写字母。所以我需要将变量lower_case_table_names设置为2.当我查看我的选项文件的常规选项卡时,它看起来如下所示: enter image description here 单击“应用”将打开一个对话框,其中显示"没有更改"。 无论如何,当我尝试使用大写字母创建数据库时,我收到警告:

  

服务器配置了lower_case_table_names = 1   允许在模式和表名中使用小写字符。

我感觉服务器上的my.ini文件与选项文件配置中提到的文件不同。当我尝试手动添加此变量时 在我的my.ini文件中,我看到下面的文字:

# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

这就是我几天来一直困在创建模式的过程中。

5 个答案:

答案 0 :(得分:7)

在Windows中,表命名不区分大小写。也就是说,您的Customer表和customer表在Windows上始终是相同的。这是NT文件系统的限制。当您的MySQL 服务器在Windows平台上运行时,这适用。

表示工作台客户端的运行位置并不重要

(您可以在Linux,BSD等上为不同的表使用混合大小写的表名,但它被认为是非常糟糕的做法:只有当你想让同事疯狂时才这样做。所以要小心。)

如果单独保留此lower_case_table_names设置,则可以在表名中使用大小写混合大小写而不会出现问题。

服务器启动时实际使用的my.ini文件通常位于data目录中。安装过程可以复制该文件的预加载版本,例如my_large.inimy.ini,具体取决于您要执行的操作。

答案 1 :(得分:1)

如果您的数据文件位于不同于C:驱动器的驱动器上,您实际上可能有2个“my.ini”文件,一个将位于C:驱动器上,当您在Workbench中编辑选项时,这就是当你的系统实际工作的“My.ini”被改变时,文件会被更改。 检查C:\ Program Data \ MySQL \ MySQL(服务器版本),查看是否有.ini文件。如果是这样,您可能会发现文件底部的更改需要写入您的数据实际存储在驱动器上的实际工作.ini。

答案 2 :(得分:1)

在将lower_case_table_names设置更改为1以外的其他设置(默认设置)之后,您甚至无法启动mysqld。

0 =>如果在数据目录位于不区分大小写的文件系统上的系统(例如Windows)上运行MySQL,则不应将lower_case_table_names设置为0。或macOS)。这是不受支持的组合,可能会导致挂起状态。

但是让我们尝试将其更改为2:

# Specifies the on how table names are stored in the metadata.
# If set to 0, will throw an error on case-insensitive operative systems
# If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.
# If set to 2, table names are stored as given but compared in lowercase.
# This option also applies to database names and table aliases.
# NOTE: Modify this value after Server initialization won't take effect.
lower_case_table_names=2
  

C:\ Program Files \ MySQL \ MySQL Server 8.0 \ bin> mysqld   --defaults-file =“ C:\ Program Files \ MySQL \ MySQL Server 8.0 \ my.ini”

ERROR [MY-011087] [Server, Different lower_case_table_names settings for server ('2') and data dictionary ('1').
ERROR [MY-010020] [Server, Data Dictionary initialization failed.

初始化后,不允许更改此设置。 因此,lower_case_table_names需要与--initialize一起设置。

禁止使用lower_case_table_names设置启动服务器,该设置与初始化服务器时使用的设置不同。该限制是必要的,因为各种数据字典表字段使用的归类基于初始化服务器时定义的设置,并且使用不同的设置重新启动服务器会导致标识符的排序和比较方式不一致。

  

mysqld-初始化-控制台--lower_case_table_names = 2

然后使用lower_case_table_names=2再次初始化服务器后,工作台中将出现以下错误:

A server configuration problem was detected. The server is in a system that does not properly support the selected lower_case_table_names option value. Some problems may occur.

显示变量lower_case_table_names;

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 2     |

因此,结论:在Windows上,将设置保留为1的原因是0或2不能正常工作或如它们所说的那样:可能会出现一些问题。

但是我现在的数据库和表名都以大写字母显示。 实际上并没有做太多事情,因为比较总是:

 # If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.
 # If set to 2, table names are stored as given but compared in lowercase.

尼古拉斯

答案 3 :(得分:0)

在工作台中,转到:管理面板>选项文件>一般>系统>

检查“lower_case_table_names”,将值2。

关闭工作台。 重启服务MYSQL56

请参阅img here How to enable

答案 4 :(得分:0)

  1. /etc/mysql/my.cnf
  2. 编辑此文件
  3. 添加以下行:
  4. 的[mysqld]

    的lower_case_table_names = 1

    1. 重启mysql sudo /etc/init.d/mysql restart