あなたはチャールズSprayberryは、上記にリンクの質問への答えで与えられたLOAD_FILE
機能を使用することができます。すなわち、このようになります。
mysql -p -u user -e "update my_table set body=load_file('/path/to/filename') where id=x;" dbname
それは(原因パーミッションの問題やその他もろもろに、例えば)あなたのために動作しない場合は、あなたの問題を解決するためにバッシュとsed
の機能を使用することによって、異なったあなたの問題を解決します次のように、コマンドを既存:な改行やその他もろもろのように
ほとんどの特殊文字を、単一引用符で囲まれた文字列の内側だけで罰金であるように見えます。問題となる文字は、'
(文字列を終了すると解釈される)と\
(エスケープシーケンスを導入すると解釈されます)です。これらは両方とも、接頭語「\
」(たとえば、'\''
そして'\\'
は'
と\
、それぞれ)を表す文字列リテラルです。このsed
スクリプトは、任意の'
または\
前\
を挿入します。
あなたは、このようバッシュから呼び出すことができます
s/\('\|\\\)/\\\1/g
:
sed 's/\('"'"'\|\\\)/\\\1/g' filename
(たとえば、filename
この含まれている場合:
a \ b \ c
d ' e ' f
を
そしてsed 's/\('"'"'\|\\\)/\\\1/g' filename
はこれを印刷します:
a \\ b \\ c
d \' e \' f
)。しかし、あなたは`...`
に上記の文字をラップすることはできません。なぜならこれらの文字はBashにとっても特別なものであり、混乱するからです。 (私はあなたがBashを使用していると仮定していますか?)代わりに$(...)
を使用する必要があります。これは`...`
に相当するBash表記法です。 (私はいつも`...`
上$(...)
を使用することをお勧めします)だからあなたの全体的なコマンドは次のようになります
mysql -p -u user -e "update my_table set body='$(sed 's/\('"'"'\|\\\)/\\\1/g' filename)' where id=x;" dbname
は、私はいくつかの詳細については不明です。完全なファイルの(短い)例を、それがファイルの場合に使用できるSQL文と共に与えることができますか? – ruakh
(特に、私が不明な点は、ファイル全体が1つのテーブルセルに入っているのか、それともファイルの各行が別の行に入っているのかということです) – ruakh
@ruakhファイル全体が既存の行の単一の表セルに転送することができます。あなたは正しい '列'は非常に誤解を招く、私はそれを変更します – user1146332