LoginSignup
5
4

More than 3 years have passed since last update.

エスケープおさらい

Last updated at Posted at 2020-07-18

はじめに

MySQLのエスケープ処理について真面目に考えたことなかったので、簡単にまとめる。

その前にエスケープ関連の言葉をおさらい

エスケープの言葉をおさらいするだけでも結構スッキリした

エスケープ処理

プログラミング言語やソフトウェアで文字列を扱う際に、特定の記号文字などに続けて記された文字(の並び)に、その文字本来の意味とは異なる特別な意味や機能を与える

エスケープシーケンス

特殊な文字を、普通の文字の組み合わせで表現したもの
例えば、「\n」(「\」と「n」の組み合わせ)で改行を意味する(プログラミング言語によって異なるが)

エスケープ文字

2つの意味で使われている、意味が真逆なので文脈から読み取る必要がある

  • 特別な意味を無効にするための文字
  • 特別な意味を付与するための文字

サニタイジング

入力データの無害化で、エスケープ処理はその手段の一つ

特別な意味を無効にするための文字

「^a」はコンピュータでは「aではじまる文字列」と解釈されるが、「^a」と書くことで「^a」の二つの文字列と解釈される
ここでいうバックスラッシュがエスケープ文字にあたる

特別な意味を付与するための文字

エスケープシーケンスで説明した「\」(バックスラッシュ)のこと

MySQLではどんな文字がエスケープ処理されるのか

MySQLのエスケープシーケンス

エスケープシーケンス シーケンスが表す文字
\0 ASCII NUL (0x00) 文字。
\' 単一引用符 (「'」) 文字。
\" 二重引用符 (「"」) 文字。
\b バックスペース文字。
\n 改行 (ラインフィード) 文字。
\r 復帰改行文字。
\t タブ文字。
\Z ASCII 26 (Ctrl+Z)。表に続いて記されている注釈を参照してください。
\ バックスラッシュ (「\」) 文字。
\% 「%」文字。表に続いて記されている注釈を参照してください。
_ 「_」文字。表に続いて記されている注釈を参照してください。

エスケープされる例

select "hello\nworld"
実行結果
hello
world

上記以外の文字に「\」(エスケープ文字)がついていても無視される

select "\h\e\l\l\o \w\o\r\l\d"
実行結果
hello world

他の言語のエスケープシークエンスは?

html

エスケープ文字 文字 名称
< &lt; 小なり
> &gt; 大なり
(半角スペース) &nbsp; 半角スペース
& &amp; アンパサンド
© &copy; コピーライト
" &quot ダブルクォーテーション
' &#39; シングルクォーテーション
¥ &yen; 円マーク

javascript

エスケープシーケンス 意味
¥b バックスペース
¥t 水平タブ
¥v 垂直タブ
¥n 改行
¥r 復帰
¥f 改ページ
¥' シングルクオーテーション
¥" ダブルクオーテーション
¥¥ ¥文字
¥0 NULL文字
¥xXX 2桁のXX(16進数)が表すLatin-1文字
¥uXXXX 4桁のXXXX(16進数)が表すUnicode文字

まとめ

MySQLがどの文字をエスケープするのかはまとめることでスッキリしたが、アプリケーション側でMySQLのエスケープ文字をどのように扱ってデータを保存しているのかを見ていきたい。

参考

この記事は以下の情報を参考にして執筆しました。

https://wa3.i-3-i.info/word11732.html
http://e-words.jp/w/%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E5%87%A6%E7%90%86.html
https://dev.mysql.com/doc/refman/5.6/ja/string-literals.html
https://pasomaki.com/html-escape/
https://www.javadrive.jp/javascript/num/index2.html

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4