SQL Server on Linux 向けのコマンドラインとして、Windows 版の SQL Server でも実装されている「bcp」「sqlcmd」は、Linux 向けもリリースされていますが、日本語の扱いが Windows 版と少し異なる点がありますので簡単にではありますがまとめてみました。
各コマンドの Linux 版の詳細については、次のドキュメントから確認することができます。
私が検証した限りでは、次の操作は気を付けておく必要があるかと。
- 日本語名のテーブルの bcp を使用したエクスポート
- bcp のデフォルトの改行コードが LF となる
bcp のドキュメントに次のように記載されているので、CP932 の扱いは都度確認したほうがよいかなと。
このリリースでは、Latin-1 および UTF-16 文字がサポートされています。
Linux の SQL Server に対して、Windows 環境から bcp / sqlcmd を実行した場合は従来通りの動作となるかと。
各コマンドを検証した結果は次のようになりました。
Contents
bcp の検証結果
|
LANG=ja_JP.UTF-8 |
日本語名のデータベース |
接続可能 |
日本語名のテーブル |
エクスポート不可 |
日本語の列名 |
エクスポート可能 |
改行コード |
LF で出力される -r \\r\\n オプションを指定することで CR + LF で出力可能 (Windows の場合は CR + LF がデフォルト) |
varchar (CP932) のエクスポート |
デフォルトで UTF-8 のファイルで出力される。 (Windows の場合は、-C 65001 を指定しないと CP932 で出力される) |
nvarchar (UTF-16) のエクスポート |
デフォルトで UTF-8 のファイルで出力される (Windows の場合は、-C 65001 を指定しないと CP932 で出力される) nvarchar のダブルバイトもエクスポートされる |
varchar (CP932) のインポート |
インポート可能 |
nvarchar (UTF-16) のインポート |
インポート可能 |
varchar (CP932) のエクスポート nvarchar (UTF-16) のエクスポート varchar (CP932) のインポート nvarchar (UTF-16) のインポート (-n : ネイティブモードでの出力) |
nvarchar / varchar ともにエクスポート / インポート可能 |
sqlcmd の検証結果
|
LANG=ja_JP.UTF-8 |
日本語名のデータベース |
接続可能 |
日本語名のテーブル |
操作可能 |
コンソールで varchar (CP932) 列の文字の表示 |
Ubuntu 16.04.4 + 最新の bcp で試したら OK でした |
コンソールで nvarchar (UTF-16) 列の文字の表示 |
ダブルバイトも表示可能 |
SQL ファイル (CP932) で varchar (CP932) 列の SELECT |
可能 |
SQL ファイル (CP932) で nvarchar (UTF-16) 列の SELECT |
可能 |
SQL ファイル (UTF-8) で varchar (CP932) 列を WHERE 句にしての SELECT |
可能 |
SQL ファイル (UTF-8) で nvarchar (UTF-16) 列を WHERE 句にしての SELECT |
可能 |