让CMD对MySQL使用敏感吗?

时间:2010-05-24 04:59:18

标签: mysql windows batch-file cmd

我在bat文件中有一个清理脚本,我想在下面执行,但问题是我得到一个mysql错误说未知数据库并将其显示为testdb。我想我可以改变我的代码testdb,但我想知道。

我如何使用Windows cmd使用区分大小写,以便我可以正确执行查询而不是总是小写?

mysql.exe -u root -q "drop database TestDB; create database TestDB;"

2 个答案:

答案 0 :(得分:2)

cmd.exe不会改变您的命令的情况,如下所示:

echo Hello There

我认为你的主要问题是你试图在一个并不真正支持它的环境中强加区分大小写。

如果其中一个是Windows,您应该只需embrace case-insensitivity并在所有系统上将lower_case_table_names设置为1。根据你的症状,听起来它被设置为0某种方式并不是真正的犹太洁食。从文档中,此变量的值意味着:

  • 0 /表和数据库名称使用CREATE TABLE或CREATE DATABASE语句中指定的字母大小存储在磁盘上。名称比较区分大小写。如果在具有不区分大小写的文件名(例如Windows或Mac 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一样。

您可以通过执行以下命令获取当前和新会话值:

show variables like 'lower_case_table_names';
show global variables like 'lower_case_table_names';

答案 1 :(得分:2)

顺便说一句,您似乎使用了错误的选项:

  -q, --quick         Don't cache result, print it row by row. This may slow
                      down the server if the output is suspended. Doesn't use
                      history file.

您需要的是-e

  -e, --execute=name  Execute command and quit. (Disables --force and history
                      file)

示例中的命令将失败(Windows上出现错误1049)。