[英]SQL Syntax error in Bash Script
我正在修复一个数据库,并有一个用于更正多个表的脚本。 例如,这工作正常:
mysql -u $U -p$P -D$D <<< 'ALTER TABLE
xyz_tablename
DROPcolumnname
;'
我不是真正的 SQL 高手,所以我不知道如何解决这个问题,而且当我尝试这个时遇到了语法错误
mysql -u $U -p$P -D$D <<< 'ALTER TABLE
drupal_url_alias
CHANGElanguage
language
VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';'
此 SQL 语句工作正常:
ALTER TABLE
drupal_url_alias
CHANGElanguage
language
VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ''
问题是你的 SQL 语句包含单引号并且放在单引号中。 这让 shell 混淆了一个带引号的字符串在哪里结束和一个新字符串开始的位置。
尝试这个:
mysql -u $U -p$P -D$D <<< "ALTER TABLE drupal_url_alias CHANGE language language VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';"
我已将语句放在双引号中。 请注意,双引号并不等同于单引号(例如,变量插值发生在双引号中,而不是单引号中),但在您的特定情况下,唯一的区别是DEFAULT
之后的单引号保持不变。
Bash 中的单引号内不能有单引号。
您必须使用"
:
mysql -u $U -p$P -D$D <<< "ALTER TABLE drupal_url_alias CHANGE language language VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.