SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Linux 版の bcp と sqlcmd の日本語対応状況のメモ

leave a comment

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 を実行した場合は従来通りの動作となるかと。
各コマンドを検証した結果は次のようになりました。

bcp の検証結果

 

LANG=ja_JP.UTF-8
コンソール
=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
コンソール
=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

可能

Share

Written by Masayuki.Ozawa

1月 8th, 2018 at 9:21 pm

Posted in SQL Server

Tagged with ,

Leave a Reply