Bash脚本中的SQL语法错误

时间:2012-03-07 09:48:24

标签: sql bash

我正在修复数据库,并有一个用于更正多个表的脚本。例如,这很好用:

  

mysql -u $ U -p $ P -D $ D<<< 'ALTER TABLE xyz_tablename DROP columnname;'

我不是一个SQL王牌所以我不确定如何解决这个问题,而且当我尝试这个时遇到语法错误

  

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'';'

此SQL语句可以正常工作:

  

ALTER TABLE drupal_url_alias CHANGE language language VARCHAR(12)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT''

3 个答案:

答案 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 '';"