it-swarm.com.de

erstellen einer Datenbank über Bash mit Bindestrich in Datenbankname

Ich versuche, eine neue Datenbank über Bash zu erstellen, die einen Bindestrich im Namen enthält.

Das habe ich versucht:

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

Das schlägt mit dem folgenden Fehler fehl:

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

Ich habe dann Backticks hinzugefügt:

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

Ich habe ein bisschen rumgespielt und herausgefunden, dass mysql keine Backticks mag, auch ohne einen Strich im Namen:

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

Ich bin irgendwie verwirrt. Was ist hier los?

PS: In phpmyadmin funktioniert es wie erwartet beim Hinzufügen von Backticks

23
Fuzzyma

Sie zitieren entweder die Backticks oder verwenden einfach einfache Anführungszeichen statt doppelte Anführungszeichen um den Befehl:

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

Andernfalls würde die Shell die Backticks um eine Befehlsersetzung erweitern. Überprüfen Sie dies: http://tldp.org/LDP/abs/html/commandsub.html

Beachten Sie außerdem, dass Sie den Befehl Echo nicht benötigen. Sie können die Befehlszeilenoption -e von mysql verwenden

30
hek2mgl

Verwenden Sie mit Backslahes vor Backticks:

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