我有一个bat文件清理脚本,我想要做的下面,但问题是我得到一个MySQL错误说未知的数据库,并显示为testdb。 我想我可以改变我的代码testdb,但我想知道。
我如何有Windows CMD使用区分大小写,所以我可以正确执行查询,而不是总是以小写?
mysql.exe -u root -q "drop database TestDB; create database TestDB;"
cmd.exe
将不会改变您的命令的情况下证明与:
echo Hello There
我认为你的主要问题是你试图在一个并不真正支持它的环境中强加大小写敏感性。
如果其中一个系统是Windows,那么您可能只需要支持不区分大小写,并在所有系统上将lower_case_table_names
设置为1
。 从你的症状来看,听起来好像它已经被设置为0
,这不是真正的犹太教。 从文档中,这个变量的值意味着:
0 /表和数据库名称使用CREATE TABLE或CREATE DATABASE语句中指定的lettercase存储在磁盘上。 名称比较区分大小写。 如果您在具有不区分大小写的文件名(例如Windows或Mac OS X)的系统上运行MySQL,则不应将此变量设置为0。 如果在不区分大小写的文件系统上使用–lower-case-table-names = 0强制将此变量设置为0,并使用不同的lettercases访问MyISAM表名,则可能导致索引损坏。
1 /表名在磁盘上以小写形式存储,名称比较不区分大小写。 MySQL在存储和查找时将所有表名转换为小写字母。 这种行为也适用于数据库名称和表别名。
2 /表和数据库名称使用CREATE TABLE或CREATE DATABASE语句中指定的lettercase存储在磁盘上,但是MySQL在查找时将它们转换为小写。 名称比较不区分大小写。 这只适用于不区分大小写的文件系统! InnoDB表名称以小写字母存储,与lower_case_table_names = 1相同。
您可以通过执行以下命令获取当前和新建会话的值:
show variables like 'lower_case_table_names'; show global variables like 'lower_case_table_names';
顺便说一下,你似乎使用了错误的选项:
-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)。