Подтвердить что ты не робот

Создание базы данных через bash с тире в имени базы данных

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

Вот что я пробовал:

echo "CREATE DATABASE IF NOT EXISTS db-name CHARACTER SET utf8 COLLATE utf8_general_ci" | mysql -uuser -ppw

Не удалось выполнить следующую ошибку:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the 
right syntax to use near
'-name CHARACTER SET utf8 COLLATE utf8_general_ci' at line 1

Я добавил обратные ссылки:

echo "CREATE DATABASE IF NOT EXISTS `db-name` CHARACTER SET utf8 COLLATE utf8_general_ci" | mysql -uuser -ppw

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the 
right syntax to use near
'CHARACTER SET utf8 COLLATE utf8_general_ci' at line 1

Я немного поиграл и узнал, что mysql не любит backticks даже без тире в имени:

echo "CREATE DATABASE IF NOT EXISTS `dbname` CHARACTER SET utf8 COLLATE utf8_general_ci" | mysql -uuser -ppw

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the 
right syntax to use near
'CHARACTER SET utf8 COLLATE utf8_general_ci' at line 1

Я смущен. Что здесь не так?

PS: В phpmyadmin он работает так, как ожидалось, при добавлении backticks

4b9b3361

Ответ 1

Либо вы указываете обратные ссылки, либо просто используйте одинарные кавычки вместо двойных кавычек вокруг команды:

mysql -uuser -ppw -e 'CREATE DATABASE IF NOT EXISTS `db-name` CHARACTER SET utf8 COLLATE utf8_general_ci'

В противном случае оболочка расширяет обратные элементы до подстановки команд. Проверьте это: http://tldp.org/LDP/abs/html/commandsub.html

Обратите внимание, что вам не нужна команда echo. Вы можете использовать опцию командной строки -e для mysql