Создание базы данных через 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
Ответы
Ответ 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