
SQLServer からのデータ移行(varbinary)
SQLServer 2000 から PostgreSQL 8.4.3 へデータ移行を考えているのですが、
つまずいて困っています。
ご存知の方がいらっしゃいましたら教えていただけないでしょうか。
あるテーブル上にvarbinary(32)の項目があり、
クエリアナライザで見ると「0x11223344・・・」という値が入っているのですが、
PostgreSQL側ではこの項目のデータ型はどう定義したらよいでしょうか。
character varying(32)としてみましたが、
定義がふさわしくないのか、SQLがまずいのか、思うようにINSERTができませんでした。
たとえば、
insert into ... values(0x1122334455667788990011223344556677889900112233445566778899001122, ...)
とすると
---
NOTICE: 識別子"x1122334455667788990011223344556677889900112233445566778899001122"を"x11223344556677889900112233445566778899001122334455667788990011"に切り詰めます
SQLステート:42601
---
が返りますし
insert into ... values(x'1122334455667788990011223344556677889900112233445566778899001122', ...)
では
---
ERROR: 値は型character varying(32)としては長すぎます
SQLステート:22001
---
が返ります。
実際は、.Net C# のプログラムにてDataTableにSQLServerからデータをFillして、それを元にINSERT文を作成しています。
デバッグすると、Byte配列に[0]17,[1]34... という具合に入ってくるので
if ((col.DataType == typeof(String)) || (col.DataType == typeof(DateTime)) ||(col.DataType == typeof(Decimal)) )
{
valueColumns.AppendFormat("'{0}',", row[col.ColumnName].ToString());
}
else if(col.DataType == typeof(Byte[]))
{
string tmp = "";
for (int i = 0; i < ((Byte[])row[col.ColumnName]).Length; i++)
{
tmp += (string.Format("{0:X2}", ((Byte[])row[col.ColumnName])[i]));
}
valueColumns.AppendFormat("x'{0}',", tmp);
}
else
{
valueColumns.AppendFormat("{0},", row[col.ColumnName].ToString());
}
のようにDataType別に振り分けて、上記else ifが通るようにコーディングしています。
よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
0x11223344・・・・を数値として保存しようとしたら切り詰められるかと。
文字列として保存する場合はドキュメントに
-----------------------------------------
短い文字列(126バイトまで)の保存には、実際の文字列に1バイト加えたサイズが必要です。
characterでは空白によるパッド分が加わります。
-----------------------------------------
とあります。
Postgres側のデータ型が varcharでいいのかってことですが、ロケールによっては
NGの場合があるかもしれないので私でしたら素直に?bytea型にします。
bytea型で文字列リテラルとして入力する方法はドキュメントをご覧ください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 、この式はどのように解釈すればいいのでしょうか 4 2023/02/03 08:53
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- PHP php エラー 2 2022/10/23 16:43
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java環境で使用するAccessデー...
-
チェックボックスからデータベ...
-
SQLServer からのデータ移行(v...
-
同時アクセス
-
TO_NUMBERの結果は、カラムに追...
-
timestampのデータはどのように...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
hp z200 sffというパソコンな...
-
データの入れ替えを同時に行な...
-
Excelでしりとりを作る方法
-
selectで取得したデータがブラ...
-
SQLで、Join句で結合したテ...
-
HTMLソースの検索について
-
アクセスについて質問です。緊...
-
カテゴリと個別商品の集計SQLに...
-
SQL Server2008のクエリの書式...
-
BCPでCSVファイルをインポート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
timestampのデータはどのように...
-
エクセルvbaでpostgresに接続を...
-
TO_NUMBERの結果は、カラムに追...
-
insert処理でDATE型を追加したい
-
SERIAL型の省略入力について
-
PostgresSQLでの日付の加算減算
-
SQLServer からのデータ移行(v...
-
PHPでInsertを実行したら空白の...
-
同時アクセス
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
UPDATEで既存のレコードに文字...
-
truncate tableを使って複数の...
-
PostgreSQLのtimestamp型で時間...
-
エラーを起こす方法
-
既存データをINSERT文にして出...
-
オラクルのUPDATEで複数テーブル
-
SQLで、Join句で結合したテ...
おすすめ情報