web-dev-qa-db-fra.com

créer une base de données via bash avec un tiret dans le nom de la base de données

J'essaie de créer une nouvelle base de données via bash qui a un tiret dans le nom.

C'est ce que j'ai essayé:

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

Cela échoue avec l'erreur suivante:

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

J'ai ajouté des backticks alors:

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

J'ai joué un peu et j'ai découvert que MySQL n'aimait pas les backticks, même sans le tiret:

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

Je suis un peu confus. Quel est le problème ici?

PS: Dans phpmyadmin cela fonctionne comme prévu lors de l'ajout de backticks

23
Fuzzyma

Soit vous citez les guillemets ou utilisez simplement des guillemets simples au lieu de guillemets doubles autour de la commande:

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

Sinon, le shell développerait les backticks pour une substitution de commande. Vérifiez ceci: http://tldp.org/LDP/abs/html/commandsub.html

Notez également que vous n'avez pas besoin de la commande echo. Vous pouvez utiliser l'option -e de la ligne de commande mysql

30
hek2mgl

Utiliser avec les backslahes avant les backticks:

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