PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kolom byte Postgres mengembalikan string (array char) alih-alih byte array

Di Npgsql ada NpgsqlDataReader class untuk mengambil baris yang disisipkan, mis:

NpgsqlConnection conn = new NpgsqlConnection(connStr);
conn.Open();

NpgsqlCommand insertCmd =
    new NpgsqlCommand("INSERT INTO binaryData (data) VALUES(:dataParam)", conn);
NpgsqlParameter param = new NpgsqlParameter("dataParam", NpgsqlDbType.Bytea);

byte[] inputBytes = BitConverter.GetBytes((int)0);
Console.Write("Input:");
foreach (byte b in inputBytes)
    Console.Write(" {0}", b);
Console.WriteLine();

param.Value = inputBytes;
insertCmd.Parameters.Add(param);
insertCmd.ExecuteNonQuery();

NpgsqlCommand selectCmd = new NpgsqlCommand("SELECT data FROM binaryData", conn);
NpgsqlDataReader dr = selectCmd.ExecuteReader();
if(dr.Read())
{
    Console.Write("Output:");
    byte[] result = (byte[])dr[0];
    foreach(byte b in result)
        Console.Write(" {0}", b);
    Console.WriteLine();
}

conn.Close();

Hasil dari aplikasi C#:

Input: 0 0 0 0
Output: 0 0 0 0

Hasil dari pgAdmin:

"\000\000\000\000"

EDIT:

Saya menemukan penjelasan mengapa Anda mendapatkan:

92 48 48 48 48 48 48 48 48

Saya memeriksa kode saya dengan versi sebelumnya Npgsql2.0.10-bin-ms.net3.5sp1.zip dan dapatkan hasil di atas (tentu saja pgAdmin mengembalikan \000\000\000\000 ), jadi menurut saya yang terbaik yang dapat Anda lakukan adalah menggunakan versi lain tanpa bug ini.

JAWABAN: Pengguna versi Npgsql yang lebih tinggi dari 2.0.10



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. konversi tanggal ke integer di postgresql

  2. Postgres:\copy kesalahan sintaks dalam file .sql

  3. Interval pencocokan PostgreSQL antara waktu mulai dan waktu berakhir dengan stempel waktu

  4. PostgreSQL 10 di Linux - LC_COLLATE lokal en_US.utf-8 tidak valid

  5. Hapus baris duplikat dari tabel kecil