我有以下代码通过命令行创建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就会失败。
即使是特殊角色,我也要如何修复它才能工作?
发布于 2014-08-10 06:54:37
在mysql中,只有ASCII:_可以包含在数据库名称中,没有引号的。参见:9.2 Schema Object Names允许的字符在引号标识符中包括完整的基本多语言平面(BMP),但U+0000除外。Id。标识符引号字符是回勾(“`”)。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,而不必担心反勾引号:)
https://stackoverflow.com/questions/25225777
复制相似问题