OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

Windows版のvsqlで日本語を扱う方法

公開日:
基本操作
#vsql
#文字化け

はじめに

VerticaクライアントのWindows版に含まれるvsqlでは、日本語データをサポートしていません。
仮に日本語データをINSERTすると、文字化けした状態でデータが格納されます。
今回の記事では回避策を紹介します。

問題点

Windows版vsqlでは、日本語データをサポートしていません。

問題点の例

以下のシナリオに沿って文字化けを起こす状況を見てみます。

1. Windows版vsqlで日本語データをINSERT。
2. そのデータをVerticaサーバ(Linux版vsql)でSELECTすると文字化けが発生する。

[Windows版vsqlでの操作]

dbadmin=> INSERT INTO t1 VALUES(1, 'テスト') ;
 OUTPUT
--------
      1
(1 row)

dbadmin=> COMMIT;
COMMIT

dbadmin=> SELECT * FROM t1;
 col1 |  col2
------+--------
    1 | テスト
(1 row)

Windows版vsqlでは正常に日本語が表示されます。


[Linux版vsqlでの操作]
上記データをVerticaサーバ側でSELECTすると、文字化けしたデータが表示されます。

dbadmin=> SELECT * FROM t1;
 col1 |  col2
------+--------
    1 | eXg
(1 row)

回避策

Windows版のvsqlクライアントからの操作では、日本語データを標準入力/出力で扱うことができません。
しかし、日本語データを持つファイルを扱うことはできます。
以下では、vsqlの「-f」オプションで日本語データを扱うSQLファイルを呼び出す方法を記載します。

回避策の実行例

日本語データをINSERTする場合の例を記載します。

[Windows版vsqlでの操作]

日本語データをINSERTするSQLコマンドをテキストファイルに記述します。
この時、テキストファイル(Windows上)の文字コードはUTF8で保存します。
(SJISで保存したSQLは文字化けを起こします。)

・テキストファイルの内容

INSERT INTO t1 VALUES(2, 'テスト') ;
COMMIT;

上記内容のファイルを「C:\test.sql」に保存し、以下vsqlコマンドを実行します。

C:\>vsql -U dbadmin -w XXX -h X.X.X.X -f C:\test.sql

 OUTPUT
--------
      1
(1 row)
COMMIT

[Linux版vsqlでの操作]
上記方法でINSERTした日本語データをLinux版のvsqlでSELECTします。

dbadmin=> SELECT * FROM t1;
 col1 |  col2
------+--------
    1 | eXg      ←Windows版vsqlクライアントの標準入力でINSERTしたデータ(文字化け)
    2 | テスト   ←Windows版vsqlクライアントからSQLファイルでINSERTしたデータ(文字化けしない)
(2 rows)

参考

日本語データをSELECTする場合

[Linux版vsqlでの操作]

dbadmin=> SELECT * FROM t1;
 col1 |  col2
------+--------
    1 | eXg      ←Windows版vsqlクライアントの標準入力でINSERTしたSJISデータ(文字化け)
    2 | テスト   ←Windows版vsqlクライアントからSQLファイルでINSERTしたUTF8データ(文字化けしない)
(2 rows)

[Windows版vsqlでの操作]

dbadmin=> SELECT * FROM t1 ;
 col1 |  col2
------+--------
    1 | テスト    ←Windows版vsqlクライアントの標準入力でINSERTしたSJISデータ(文字化けしない)
    2 | 繝・せ繝・←Windows版vsqlクライアントからSQLファイルでINSERTしたUTF8データ(文字化け)
(2 rows)

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。