2

html を mysql の longtext 列に挿入したいのですが、エラーが発生し続けます:

/usr/bin/mysql: Argument list too long

文字列のサイズが大きすぎる場合(少なくともそれは私が思うことです)

これはコードです:

link="7red.no"    
result=$( { stdout=$(wget -T10 -t1 "$link" -v -O -) ; } 2>&1; echo "--SePaRaToR--"; echo "$stdout"); 
dowload_stat=${result%$'\n'--SePaRaToR--*}; 
html=${result#*--SePaRaToR--$'\n'}; 
printf -v dowload_stat "%q" "$dowload_stat"
printf -v html "%q" "$html"
sqlHtml='INSERT INTO `'"${tableHtml}"'` (`extracted_link_ID`, `response_header`, `html`, `download_start`, `download_finish`) VALUES ('"'${link_id}'"', '"${dowload_stat:1}"', '"${html:1}"', '"'${start}'"', '"'${finish}'"');'
mysql -u$dbUser -p$dbPass -h$dbHost -P$dbPort -D$dbName --default_character_set utf8 -A -e "$sqlHtml"

mySQL エスケープ異なる変数での stderr と stdout の出力など、bash ではデフォルトで使用できないものがあるため、ハックを使用してコードを作成しました。 速度が重要であるため、Web インデックス作成/キャッシュ用のワーカー スクリプトでコードを使用する予定です。これにより、2 番目の質問にたどり着きます。bash でこれを行うより高速な方法はありますか?

4

1 に答える 1

0

あなたは次のようなことができるはずです

mysql -u$dbUser -p$dbPass -h$dbHost -P$dbPort -D$dbName --default_character_set utf8 -A <<EOS 
    INSERT INTO \"${tableHtml}\" ('extracted_link_ID', 'response_header', 'html', 
       'download_start', 'download_finish') 
    VALUES (\"${link_id}\", \"${dowload_stat:1}\", \"${html:1}\", \"${start}\", \"${finish}\");
 EOS

「ヒアドキュメント」について読んでおけば大丈夫です。(ドキュメントは <

これが機能せず、それでも が表示arg list too longされる場合は、すべてが正しく引用されていません。私はmysqlを利用できませんが、私が実行できたテストを考えると、これは機能するはずであり、ヒアドキュメントは非常に長くなる可能性があります(非常に大きな値でも制限があると思いますが).

EOS は任意の文字列にすることができますが、EndOfScript の自己文書化の省略形であることを意図しています。

mySQL では、列を bck-quote char で引用できると想定しています。良いシェルフーではなく、一重引用符で例を始めるので、それを行うことができます。

これが役立つことを願っています。

于 2012-04-19T03:06:30.677 に答える