はじめに
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で確認しています。