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

Mehvish Ashiq 2023年1月30日
  1. エスケープシーケンスの定義
  2. MySQL のエスケープシーケンス
  3. MySQL のワイルドカード文字を使用したエスケープシーケンス
  4. まとめ
MySQL のエスケープシーケンス

この記事では、エスケープシーケンスについて学習します。その定義を例とサンプルコードで確認します。

また、ワイルドカード文字を使用してデータ内のパターンを見つける方法についても説明します。

エスケープシーケンスの定義

エスケープシーケンス文字は出力不可能な文字であり、次の文字の代替解釈がエスケープ文字シーケンスであることを指定します。

バックスラッシュ*\\*として表される)から始まり、2つ以上の文字があります。たとえば、\n は、バックスラッシュが 1 文字で、n が 2 番目の文字である改行を示します。

エスケープシーケンスのリストとその表現を以下に示します。

エスケープシーケンス 文字表現
\n 改行文字
\0 ヌル文字
\b バックスペース文字
\r キャリッジリターン文字
\t タブ文字
\\ バックスラッシュ
\% パーセンテージ文字
\a アラート
\f フォームフィード(新しいページ)
\v 垂直タブ
\' 単一引用符
\" 二重引用符
\? 疑問符

アプリケーションプログラムを作成しているときに、文字列を操作しなければならない状況がいくつかあります。この文字列は、データベースに保存する前に適切にエスケープする必要があります。

ここではエスケープシーケンスを使用します。例として、customer_firstnameNyy'a である customer テーブルのレコードを INSERT する場合は、エスケープシーケンスを使用する必要があります。

このチュートリアルのサンプルコードには、customerorder という名前の 2つのテーブルを使用します。これらの表は、現在のデータで次のようになります。

顧客テーブル:

mysql のエスケープシーケンス-顧客テーブル

注文表:

mysql のエスケープシーケンス-順序テーブル

サンプルコード:

INSERT INTO customer(customer_firstname, customer_lastname, customer_age, customer_salary)
VALUES
('Nyy\'a', 'Daniel', 19, 10000);

出力:

mysql のエスケープシーケンス-例

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 のエスケープシーケンス-二重引用符の例

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つの文字があります。比較するには、次の出力を参照してください。

出力:

mysql のエスケープシーケンス-ワイルドカードを使用した一重引用符

列で特定のパターンを探している場合はどうなりますか?order テーブルを使用して練習してみましょう。-12 としてパターンを含む order_date フィールドからすべての注文日を検索します。

ここで、%は 1つ以上の文字を示します。これは、必要なパターンの前の 1つ以上の文字と、次のサンプルコードの 1つ以上の文字を意味します。

サンプルコード:

SELECT order_date from order where order_date like '%\-12%';

出力:

mysql のエスケープシーケンス-パターン部分を見つける

ワイルドカード文字を使用した二重引用符の例を理解するには、customer テーブルの新しいレコードを INSERT します。

サンプルコード:

INSERT INTO customer(customer_firstname, customer_lastname, customer_age, customer_salary)
VALUES
('\"Nyy\'a\"', 'Dan\'iel', 19, 10000);

出力:

mysql のエスケープシーケンス-パターンパート b を検索

次のコマンドを使用して、次のパターンを満たす customer テーブルから customer_firstnamecustomer_lastname を検索します。

サンプルコード:

SELECT customer_firstname, customer_lastname from customer 
where customer_firstname like '%\"%\'%\"'
AND customer_lastname like'%\'___';

出力:

mysql のエスケープシーケンス-パターンパート c を見つける

まとめ

この記事では、次の文字の代替表現を指定するエスケープシーケンスは出力できないと結論付けました。

文字列は、データベースに保存する前にエスケープする必要があります。また、さまざまなパターンを見つけるために、エスケープ文字がワイルドカード文字とともに使用されることも学びました。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook