繁体   English   中英

Bash 脚本中的 SQL 语法错误

[英]SQL Syntax error in Bash Script

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

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

问题是你的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM