我有以下代码通过命令行
创建一个mysql数据库dbcommand="create database $dbname;GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@localhost IDENTIFIED BY '$dbpassw';FLUSH PRIVILEGES;"
mysql -u root -p$pass -e "$dbcommand"
大部分时间都可以正常工作,但如果$ dbname / $ dbuser由一个特殊字符(如-
)组成,则$dbcommand
会失败。
如何使用特殊字符
来修复它答案 0 :(得分:1)
在mysql中只有ASCII:[0-9,a-z,A-Z $ _](基本拉丁字母,数字0-9,美元,下划线)可以包含在数据库名称未加引号中。请参阅:9.2 Schema Object Names 引用标识符中的允许字符包括完整的Unicode基本多语言平面(BMP),但U + 0000除外。 ID。标识符引号字符是<strong>反引号(“`”)。 ID。所以在你的情况下你需要:
dbcommand="create database \`$dbname\`;GRANT ALL PRIVILEGES ON \`$dbname\`.* TO $dbuser@localhost IDENTIFIED BY '$dbpassw';FLUSH PRIVILEGES;"
mysql -u root -p${pass} -Be "$dbcommand"
如果出于某种原因,\
字符在分配给dbcommand
时被删除,请使用:
mysql -u root -p${pass} -Be "create database \`$dbname\`;GRANT ALL PRIVILEGES ON \`$dbname\`.* TO $dbuser@localhost IDENTIFIED BY '$dbpassw';FLUSH PRIVILEGES;"
示例:强>
$ mysql -Be "create database \`myblog-wp\`;"
$ mysql -Be "show databases;"
Database
information_schema
mmedia
myblog-wp
mysql
performance_schema
注意:在bash中,您必须使用\
转义反引号,以防止它们被视为命令执行请求。如果是我,我将我的数据库命名为weblogwp
,而不必担心反引号:)