Сделать CMD чувствительным для использования с MySQL? - PullRequest
1 голос
/ 24 мая 2010

У меня есть скрипт очистки в bat-файле, и я хотел сделать следующее, но проблема в том, что я получаю сообщение об ошибке mysql, сообщающее о неизвестной базе данных и показывающее его как testdb. Я думаю, что я могу изменить свой код testdb, но я хотел бы знать.

Как настроить чувствительность к регистру в Windows cmd, чтобы я мог выполнять запросы правильно, а не всегда в нижнем регистре?

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

Ответы [ 2 ]

2 голосов
/ 24 мая 2010

Кстати, вы, кажется, используете неправильную опцию:

  -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)

Команда в вашем примере завершится ошибкой (с ошибкой 1049 в Windows).

2 голосов
/ 24 мая 2010

cmd.exe не изменит регистр ваших команд, о чем свидетельствует:

echo Hello There

Я думаю, что ваша главная проблема в том, что вы пытаетесь навязать регистр чувствительности в среде, которая его не поддерживает.

Вам, вероятно, следует просто принять без учета регистра и установить lower_case_table_names на 1 на всех своих системах, если одной из них является Windows. Судя по твоим симптомам, похоже, что оно установлено на 0, что на самом деле не совсем кошерное. Из документов значения этой переменной означают:

  • 0 / Имена таблиц и баз данных хранятся на диске с использованием буквенного регистра, указанного в операторе CREATE TABLE или CREATE DATABASE. Сравнение имен чувствительно к регистру. Вы не должны устанавливать эту переменную равной 0, если вы используете MySQL в системе с именами файлов без учета регистра (например, Windows или Mac OS X). Если вы зададите для этой переменной значение 0 с параметром --lower-case-table-names = 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...