はじめに
VerticaクライアントのWindows版に含まれるvsqlでは、日本語データをサポートしていません。仮に日本語データをINSERTすると、文字化けした状態でデータが格納されます。
今回の記事では回避策を紹介します。
問題点
Windows版vsqlでは、日本語データをサポートしていません。問題点の例
以下のシナリオに沿って文字化けを起こす状況を見てみます。1. Windows版vsqlで日本語データをINSERT。
2. そのデータをVerticaサーバ(Linux版vsql)でSELECTすると文字化けが発生する。
[Windows版vsqlでの操作]
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						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すると、文字化けしたデータが表示されます。
| 
					 1 2 3 4 5  | 
						dbadmin=> SELECT * FROM t1;  col1 |  col2 ------+--------     1 | eXg (1 row)  | 
					
回避策
Windows版のvsqlクライアントからの操作では、日本語データを標準入力/出力で扱うことができません。しかし、日本語データを持つファイルを扱うことはできます。
以下では、vsqlの「-f」オプションで日本語データを扱うSQLファイルを呼び出す方法を記載します。
回避策の実行例
日本語データをINSERTする場合の例を記載します。[Windows版vsqlでの操作]
日本語データをINSERTするSQLコマンドをテキストファイルに記述します。
この時、テキストファイル(Windows上)の文字コードはUTF8で保存します。
(SJISで保存したSQLは文字化けを起こします。)
・テキストファイルの内容
| 
					 1 2  | 
						INSERT INTO t1 VALUES(2, 'テスト') ; COMMIT;  | 
					
上記内容のファイルを「C:\test.sql」に保存し、以下vsqlコマンドを実行します。
| 
					 1 2 3 4 5 6 7  | 
						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します。
| 
					 1 2 3 4 5 6  | 
						dbadmin=> SELECT * FROM t1;  col1 |  col2 ------+--------     1 | eXg      ←Windows版vsqlクライアントの標準入力でINSERTしたデータ(文字化け)     2 | テスト   ←Windows版vsqlクライアントからSQLファイルでINSERTしたデータ(文字化けしない) (2 rows)  | 
					
参考
日本語データをSELECTする場合[Linux版vsqlでの操作]
| 
					 1 2 3 4 5 6  | 
						dbadmin=> SELECT * FROM t1;  col1 |  col2 ------+--------     1 | eXg      ←Windows版vsqlクライアントの標準入力でINSERTしたSJISデータ(文字化け)     2 | テスト   ←Windows版vsqlクライアントからSQLファイルでINSERTしたUTF8データ(文字化けしない) (2 rows)  | 
					
[Windows版vsqlでの操作]
| 
					 1 2 3 4 5 6  | 
						dbadmin=> SELECT * FROM t1 ;  col1 |  col2 ------+--------     1 | テスト    ←Windows版vsqlクライアントの標準入力でINSERTしたSJISデータ(文字化けしない)     2 | 繝・せ繝・←Windows版vsqlクライアントからSQLファイルでINSERTしたUTF8データ(文字化け) (2 rows)  | 
					

