我正在修复数据库,并有一个用于更正多个表的脚本。例如,这很好用:
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''
答案 0 :(得分:4)
问题是您的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
之后的单引号保持不变。 / p>
答案 1 :(得分:0)
Bash中的单引号内不能有单引号。
答案 2 :(得分:-2)
您必须使用"
:
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 '';"