PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Kolumna Postgres bytea zwraca ciąg znaków (tablica znaków) zamiast tablicy bajtów

W Npgsql jest NpgsqlDataReader klasa do pobierania wstawionych wierszy, np.:

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();

Wynik z aplikacji C#:

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

Wynik z pgAdmin:

"\000\000\000\000"

EDYTUJ:

Znalazłem wyjaśnienie, dlaczego otrzymujesz:

92 48 48 48 48 48 48 48 48

Sprawdziłem kod w poprzedniej wersji Npgsql2.0.10-bin-ms.net3.5sp1.zip i uzyskaj powyższy wynik (oczywiście pgAdmin zwraca \000\000\000\000 ), więc myślę, że najlepszym rozwiązaniem, które możesz zrobić, jest użycie innej wersji bez tego błędu.

ODPOWIEDŹ: Użytkownik wyższej wersji Npgsql niż 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. Kontynuuj oszczędzanie od wielu do wielu

  2. Jak sprawić, by polecenie kopiowania kontynuowało działanie z przesunięciem ku czerwieni nawet po przekroczeniu limitu czasu funkcji lambda, która ją zainicjowała?

  3. jak używać zmiennych w skrypcie psql

  4. Przegląd kompilacji Just-in-Time (JIT) dla PostgreSQL

  5. Wygeneruj n wierszy NULL w PostgreSQL