MySQL - カラムの文字を置換する
独学で勉強している初心者の私は、自分で大きな問題を作り出してしまいました。データベースにデータを挿入する前に、文字列中のアポストロフィ(')をダブルクォート("")に変換していたのですが、実際にはMySQLが要求するバックスラッシュとアポストロフィ( \' )が必要でした。
私のテーブルが20万行以上になる前に、この問題をすぐに修正するのが最善だと思いました。そこで、いろいろ調べてみると、SQLのREPLACE関数が見つかりました。これは素晴らしいのですが、今、混乱しています。
ASPでは、こんなことをやっていました。
str = Replace(str,"'","""")
SQL Workbenchでデータベースを見ると、変換した記号がシングルクォート(")になっていて、ちょっと混乱しています。なぜダブルからシングルに変わったのかは理解できるのですが、今、どちらを変えればいいのかがわかりません。
SQL REPLACEを使った私の問題を解決するには、シングルクォート(")をバックスラッシュとアポストロフィに変換するか、ダブルクォート("")をバックスラッシュとアポストロフィに変換するか、どちらかでしょうか。
例えば、これです。
SQL = " SELECT REPLACE(myColumn,"""","\'") FROM myTable "
とか、これとか。
SQL = " SELECT REPLACE(myColumn,""","\'") FROM myTable "
私は自分自身をうまく説明することを願っています、任意の提案は、いつものようにありがたく受信します。私の質問について何か質問があれば、コメントください。
ありがとうございます
**-- を更新しました。
以下のクエリを試しましたが、データ内の( " )を変更することができません。
SELECT REPLACE(caption,'\"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'""','\'') FROM photos WHERE photoID = 3371
それでも、検索すれば。
SELECT COUNT(*) FROM photos WHERE caption LIKE '%"%'
16,150列が表示されるんです。
-- アップデート2 --。
さて、私は 'workaround' を作成しました。このSQLを使って、ASPスクリプトを書いて、かなり早く列全体を変換することに成功しました。
SELECT photoID, caption FROM photos WHERE caption LIKE '%""%';
を、ASPでやってみた。
caption = Replace(caption,"""","\'")
しかし、なぜSQLで実現できなかったのか、その理由を知りたいのです。
SELECT
ステートメントを実行しただけでは、データには何の影響もありません。 REPLACE
と一緒にUPDATE
ステートメントを使用しないと、変更は発生しません。以下は動作サンプルです。http://sqlize.com/7FjtEyeLAh
以下の文字を置き換えます。
このSQLを使用します。
は、これで行くかもしれませんね。
シングルクォートを使ったのは、MySQLで文字列式を登録するのがそれ'だから、だと思う。
お役に立てれば幸いです。
もし、"something"があって、"something'が必要なら、
replace(col, " \"", "◇'◇)
で、その逆の場合は、'。