MySQL で改行を挿入する方法
データベースに文字列を保存する時や、エラーメッセージなどを生成するときに、「改行を入れたい」と思ったことはありませんか?
今回は、MySQL で改行を挿入する方法と、それに関連する注意点についてご説明します。
OS ごとの改行コードの違いについて
改行はテキストの中で行を区切るための特殊な文字で、環境によって次のように異なります。
- Unix/Linux/macOS は \n - (LF)
- Windows は \r\n - (CR+LF)
VS Code などのモダンなエディタでは、どちらの環境で、どちらの改行コードでも、ちゃんと改行されて表示されるようになってはきています。
\n または \r\n を使って改行を挿入する
MySQLでは、文字列中に \n または \r\n を含めることで改行を挿入できます。
例えば、私は今 macOS を使っているので、「1行目のテキスト」と「2行目のテキスト」の間に改行を入れたい場合は次のようにできます。
SET @message = '1行目のテキスト\n2行目のテキスト';
SELECT @message;
[実行結果]
改行が入っていることを確認するために、結果の文字列をコピーして、テキストエディタに貼り付けてみました。
「1行目のテキスト」と「2行目のテキスト」の間に改行が入っていることがわかります。
CHAR() 関数を使って改行を挿入する
MySQLで、CHAR() 関数を使っても、文字列中に改行を入れることができます。
CHAR(10) が Line Feed: LF で、CHAR(13) が Carriage Return: CR です。
macOS の環境で、CHAR(10) を使って改行を入れたい場合は次のようにできます。
SET @message := '';
SET @message = CONCAT(@message, '1行目のテキスト', CHAR(10), '2行目のテキスト');
SELECT @message;
[実行結果]
1 行目で @message を明示的に変数を文字列型として初期化しています。
そうしないと、CHAR(10) は BINARY 型として扱われる可能性があり、CONCAT() に BINARY 型の引数が含まれると、結果も BINARY になり、型は BLOB になってしまうためです。
BLOB 型になるのを避けるには、変数を文字列型で初期化するか、CAST() や CONVERT() を使うのが安全です。
結果の文字列をコピーして、テキストエディタに貼り付けると、先ほどと同様に改行が入っています。
REPLACE() 関数を使って改行コードを置き換える
改行コードはOSによって異なるため、データのやりとりや外部システムとの連携時に注意が必要です。
例えば、Windows から取り込んだ CSV ファイルでは \r\n が使われていることが多く、そのまま保存されてしまいます。
必要に応じて、REPLACE() 関数で改行コードを統一することも可能です。
SET @message = '1行目のテキスト\r\n2行目のテキスト';
SET @message = REPLACE(@message, '\r\n', '\n');
SELECT @message;
[実行結果]
以上、MySQL で改行を挿入する方法と、それに関連する注意点についてご説明しました。