MySQLでテキストファイルをインポートする際、デフォルト以外のエスケープ文字を使う方法(ESCAPED BYオプションの使い方)
MySQLでは、バックスラッシュ(\)がデフォルトのエスケープ文字として設定されています。そのため、テキストファイル内でバックスラッシュを使用している場合は、データをテーブルへインポートする際に、クエリ内で特別な指定を行う必要はありません。
しかし、別の文字をエスケープ文字として使いたい場合は、テキストファイルをインポートするクエリの中で「ESCAPED BY」オプションを使って明示的に指定する必要があります。以下の例で具体的に確認していきましょう。
アスタリスク(*)をエスケープ文字として使用する例
ここでは、テキストファイル内でアスタリスク(*)をエスケープ文字として使用したケースを想定します。ファイルの内容は以下の通りです。
id,Name,Country,Salary 105,Chum*,Marsh,USA,11000 106,Danny*,Harrison,AUS,12000
この例では、「Chum*」や「Danny*」の直後にあるカンマがエスケープされています。つまり、このカンマはフィールドの区切り文字ではなく、値の一部として扱われます。
ESCAPED BYオプションを指定してインポートする
このテキストファイルをMySQLのテーブルにインポートする際は、次のようにクエリ内で「ESCAPED BY」オプションを記述します。
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee6_tbl FIELDS TERMINATED BY ',' ESCAPED BY '*' IGNORE 1 ROWS; Query OK, 2 rows affected (0.03 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
ポイント解説
- FIELDS TERMINATED BY ',':カンマをフィールドの区切り文字として指定しています。
- ESCAPED BY '*':アスタリスク(*)をエスケープ文字として指定しています。これにより、「*」の直後の文字は区切り文字ではなく、通常のデータとして読み込まれます。
- IGNORE 1 ROWS:1行目(ヘッダー行)を読み飛ばすための指定です。
インポート結果の確認
実際にどのようにデータが取り込まれたのか、SELECT文で確認してみましょう。
mysql> Select * from employee6_tbl; +------+----------------+----------+--------+ | Id | Name | Country | Salary | +------+----------------+----------+--------+ | 105 | Chum,Marsh | USA | 11000 | | 106 | Danny,Harrison | AUS | 12000 | +------+----------------+----------+--------+ 2 rows in set (0.00 sec)
結果を見ると、「Chum*」の直後のカンマがエスケープされていたため、「Name」フィールドには「Chum,Marsh」という1つの値として正しく格納されていることが分かります。同様に「Danny,Harrison」も1つのフィールド値として登録されています。
このように、テキストファイルでバックスラッシュ以外の文字をエスケープ文字として使用している場合は、LOAD DATA文に「ESCAPED BY」オプションを必ず指定することが重要です。指定しない場合、MySQLはデフォルトのバックスラッシュをエスケープ文字として解釈するため、意図しないデータの取り込みやエラーが発生する可能性があります。
-
【MySQL】EXISTSとサブクエリで別テーブルの列値と一致する行だけを抽出する方法
サブクエリとEXISTSを組み合わせるあるテーブルの列値が別のテーブルの列値と一致する場合にのみデータを取得したいときは、サブクエリとEXISTSを組み合わせると簡単に実現できます。まず、1つ目のテーブルを作成しましょう。mysql> create table DemoTable1 -> ( -> Id int, -> SubjectName varchar(20) -> )
-
MySQLストアドプロシージャでSELECT INTOを使ってテーブルからOUTパラメータにデータを読み込む方法
MySQLのストアドプロシージャでテーブルからデータを読み取り、OUTパラメータに格納するには、SELECT INTO構文を使用します。この記事では、テーブルの作成からストアドプロシージャの呼び出しまで、具体的な手順をサンプルコードとともに解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1860 ( Amount int ); Query OK, 0 rows affected (0.00 sec) 2. レコードの挿入 INSERTコマンドを使用して、テーブルにい