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つがあります。どちらの方法でも文字列中のシングルクォートを安全に扱うことができるので、状況に応じて使い分けるとよいでしょう。
-
MySQLで列(カラム)を分割する方法!SUBSTRING_INDEX関数の使い方を徹底解説
MySQLで列を分割するには?SUBSTRING_INDEX関数の基本MySQLで1つの列に格納された文字列を区切り文字で分割したい場合、SUBSTRING_INDEX()関数を使用します。この記事では、アンダースコア(_)で区切られた氏名データを分割する具体例を通じて、その使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(40) -> );Query OK, 0 rows affected (1.
-
JDBCでMySQLのバックスラッシュをエスケープするには?PreparedStatementの使い方を解説
PreparedStatementでバックスラッシュを安全にエスケープするMySQLにデータを挿入する際、バックスラッシュ(\)などの特殊文字を安全に扱うには、PreparedStatementを使用するのが最も確実な方法です。PreparedStatementはパラメータを自動的にエスケープしてくれるため、手動で「\\」のように置き換える必要がなく、SQLインジェクション対策としても有効です。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1904 ( ClientId int, ClientName var