はじめに
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) |