
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10がインストールできま...
-
エクセルで縦のカラムデータを...
-
Ophcrackについて
-
postgresqlのtableのカラムの型...
-
php、postgresqlを使ってwebア...
-
三段論法を真理値表で証明する
-
sqlの中で、 例えば条件句で AN...
-
tesuto 01
-
python3.12のインストール方法
-
Pythonで2つのデータ(キー無し...
-
数値が定期的にあらわれる文字...
-
終端クォート ' が必要です と...
-
PostgressからMySQL(MariaDB)...
-
【PostgreSQL】行の値の並びを...
-
列が存在しないと言われる
-
PostgreSQL14.6のSSL対応について
-
ポストグレにあるExcelファイル...
-
PostgreSQL レコードからアイテ...
-
文字切り替えの時に 中央にでる A
-
postgreSQL カラムの全ての値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
timestampのデータはどのように...
-
エクセルvbaでpostgresに接続を...
-
SQLServer からのデータ移行(v...
-
ゼロ割りエラーの回避について
-
insert処理でDATE型を追加したい
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
SQLサーバに対するSQL文で抽出...
-
UPDATEで既存のレコードに文字...
-
エラーを起こす方法
-
truncate tableを使って複数の...
-
既存データをINSERT文にして出...
-
オラクルのUPDATEで複数テーブル
-
SQLで、Join句で結合したテ...
-
PostgreSQLのtimestamp型で時間...
-
Accessの構成をコピーしたい
-
'modify' 付近に不適切な構文が...
-
既にテーブルが存在する場合の...
おすすめ情報