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