MySQL のエスケープシーケンス
この記事では、エスケープシーケンスについて学習します。その定義を例とサンプルコードで確認します。
また、ワイルドカード文字を使用してデータ内のパターンを見つける方法についても説明します。
エスケープシーケンスの定義
エスケープシーケンス文字は出力不可能な文字であり、次の文字の代替解釈がエスケープ文字シーケンスであることを指定します。
バックスラッシュ
(*\\*
として表される)から始まり、2つ以上の文字があります。たとえば、\n
は、バックスラッシュ
が 1 文字で、n
が 2 番目の文字である改行を示します。
エスケープシーケンスのリストとその表現を以下に示します。
エスケープシーケンス | 文字表現 |
---|---|
\n |
改行文字 |
\0 |
ヌル文字 |
\b |
バックスペース文字 |
\r |
キャリッジリターン文字 |
\t |
タブ文字 |
\\ |
バックスラッシュ |
\% |
パーセンテージ文字 |
\a |
アラート |
\f |
フォームフィード(新しいページ) |
\v |
垂直タブ |
\' |
単一引用符 |
\" |
二重引用符 |
\? |
疑問符 |
アプリケーションプログラムを作成しているときに、文字列を操作しなければならない状況がいくつかあります。この文字列は、データベース
に保存する前に適切にエスケープする必要があります。
ここではエスケープシーケンスを使用します。例として、customer_firstname
が Nyy'a
である customer
テーブルのレコードを INSERT
する場合は、エスケープシーケンス
を使用する必要があります。
customer
と order
という名前の 2つのテーブルを使用します。これらの表は、現在のデータで次のようになります。顧客テーブル:
注文表:
サンプルコード:
INSERT INTO customer(customer_firstname, customer_lastname, customer_age, customer_salary)
VALUES
('Nyy\'a', 'Daniel', 19, 10000);
出力:
MySQL のエスケープシーケンス
MySQL で使用されるさまざまなエスケープシーケンスがあります。理解するには、次の例を参照してください。
改行のサンプルコード:
SELECT 'Hi!\nWelcome to the learning Escape Sequences.'
出力:
Hi!
Welcome to the learning Escape Sequences.
キャリッジリターン文字のサンプルコード:
SET @strInput = 'Hello,How are you';
SET @strResult = REPLACE(@strInput, ',', CHAR(10)); #CHAR(10) represents \r
SELECT @strResult;
出力:
Hello
How are you
疑問符のサンプルコード:
SELECT 'Is this a question mark example\?';
出力:
Is this a question mark example?
引用符のサンプルコード:
SELECT 'firstname', 'first\'name', '"firstname"',"firstname", '\"firstname\"','firstname\?';
出力:
MySQL のワイルドカード文字を使用したエスケープシーケンス
ワイルドカード文字は、データから目的のパターンを取得し、1つ以上の文字列を置き換えるために使用されます。
これは LIKE
演算子とともに使用され、LIKE
演算子は WHERE
句で使用されます。ワイルドカードでエスケープシーケンスを使用すると、特定のパターンを簡単に取得できます。
サンプルコード:
SELECT customer_firstname from customer where customer_firstname like '___\'_';
このコードでは、customer
テーブルから customer_firstname
を探しています。ここでは、一重引用符の前に 3 文字、その後に 1 文字があります。1つの文字に 1つのアンダースコア(_
)が使用されます。
___\'_'
では、3つの文字を取得するために、3つのアンダースコアがあり、次に 1つの引用符、最後に 1つの文字があります。比較するには、次の出力を参照してください。
出力:
列で特定のパターンを探している場合はどうなりますか?order
テーブルを使用して練習してみましょう。-12
としてパターンを含む order_date
フィールドからすべての注文日を検索します。
ここで、%
は 1つ以上の文字を示します。これは、必要なパターンの前の 1つ以上の文字と、次のサンプルコードの 1つ以上の文字を意味します。
サンプルコード:
SELECT order_date from order where order_date like '%\-12%';
出力:
ワイルドカード文字
を使用した二重引用符の例を理解するには、customer
テーブルの新しいレコードを INSERT
します。
サンプルコード:
INSERT INTO customer(customer_firstname, customer_lastname, customer_age, customer_salary)
VALUES
('\"Nyy\'a\"', 'Dan\'iel', 19, 10000);
出力:
次のコマンドを使用して、次のパターンを満たす customer
テーブルから customer_firstname
と customer_lastname
を検索します。
サンプルコード:
SELECT customer_firstname, customer_lastname from customer
where customer_firstname like '%\"%\'%\"'
AND customer_lastname like'%\'___';
出力:
まとめ
この記事では、次の文字の代替表現を指定するエスケープシーケンスは出力できないと結論付けました。
文字列は、データベースに保存する前にエスケープする必要があります。また、さまざまなパターンを見つけるために、エスケープ文字がワイルドカード文字とともに使用されることも学びました。