création d'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

Qui é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'aime pas les backticks même sans un tiret dans le nom:

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. Quoi de mal ici?

PS: dans phpmyadmin il fonctionne comme prévu lors de l'ajout backticks

22
demandé sur Fuzzyma 2015-03-05 18:31:23

2 réponses

soit vous citez les backticks, soit vous utilisez simplement des guillemets simples à la place des 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 étendrait les backticks à une substitution de commande. Vérifiez ceci: http://tldp.org/LDP/abs/html/commandsub.html

notez En outre que vous n'avez pas besoin de la commande echo. Vous pouvez utiliser le -e option de ligne de commande de mysql

30
répondu hek2mgl 2015-03-05 15:40:54

utiliser avec des backslahes avant les backticks:

mysql -uuser -ppw -e 'CREATE DATABASE IF NOT EXISTS \`db-name\` CHARACTER SET utf8 COLLATE utf8_general_ci'
0
répondu Alex K 2018-05-22 14:28:45