MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでアポストロフィ(')をエスケープする2つの方法

MySQLでは、文字列に含まれるアポストロフィ(シングルクォート ')をエスケープする必要がある場面がよくあります。例えば「John's」のような名前をそのまま挿入しようとすると、構文エラーになってしまいます。

アポストロフィをエスケープするには、主に以下の2つの方法があります。

  • バックスラッシュ(\)を使用する
  • シングルクォートを2つ重ねる('')

準備:テーブルの作成

まず、動作確認用のテーブルを作成します。

mysql> create table SingleQuotesDemo
    -> (
    -> id int,
    -> name varchar(100)
    -> );
Query OK, 0 rows affected (1.16 sec)

エスケープせずにそのまま挿入しようとすると、期待した結果にはなりません。次のように、文字列が途中で閉じられたと判断され、入力待ちの状態('>)になってしまいます。

mysql> insert into SingleQuotesDemo values(1,'John's');
    '>

方法1:バックスラッシュを使う

アポストロフィの直前にバックスラッシュ(\)を付けることで、エスケープできます。

mysql> insert into SingleQuotesDemo values(1,'John\\'s');
Query OK, 1 row affected (0.19 sec)

レコードを表示して確認してみましょう。

mysql> select * from SingleQuotesDemo;

出力結果は次のとおりです。「John's」が正しく登録されていることがわかります。

+------+--------+
| id   | name   |
+------+--------+
|    1 | John's |
+------+--------+
1 row in set (0.00 sec)

方法2:シングルクォートを2つ重ねる

もう1つの方法は、アポストロフィを表したい箇所にシングルクォートを2つ連続で記述する方法です。先ほどと同じテーブルに、別のレコードを挿入してみます。

mysql> insert into SingleQuotesDemo values(2,'John''s');
Query OK, 1 row affected (0.18 sec)

レコードを表示します。

mysql> select * from SingleQuotesDemo;

出力結果は以下のとおりです。こちらも「John's」が正しく挿入されています。

+------+--------+
| id   | name   |
+------+--------+
|    1 | John's |
|    2 | John's |
+------+--------+
2 rows in set (0.00 sec)

まとめ

MySQLでアポストロフィをエスケープするには、「バックスラッシュ(\')」を使う方法と「シングルクォートを2つ重ねる('')」方法の2つがあります。どちらの方法でも文字列中のシングルクォートを安全に扱うことができるので、状況に応じて使い分けるとよいでしょう。

  1. MySQLで列(カラム)を分割する方法!SUBSTRING_INDEX関数の使い方を徹底解説

    MySQLで列を分割するには?SUBSTRING_INDEX関数の基本MySQLで1つの列に格納された文字列を区切り文字で分割したい場合、SUBSTRING_INDEX()関数を使用します。この記事では、アンダースコア(_)で区切られた氏名データを分割する具体例を通じて、その使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(40) -> );Query OK, 0 rows affected (1.

  2. JDBCでMySQLのバックスラッシュをエスケープするには?PreparedStatementの使い方を解説

    PreparedStatementでバックスラッシュを安全にエスケープするMySQLにデータを挿入する際、バックスラッシュ(\)などの特殊文字を安全に扱うには、PreparedStatementを使用するのが最も確実な方法です。PreparedStatementはパラメータを自動的にエスケープしてくれるため、手動で「\\」のように置き換える必要がなく、SQLインジェクション対策としても有効です。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1904 ( ClientId int, ClientName var