PDA

View Full Version : Come tradurre CAST (0x... AS BINARY) in SQL di Firebird ?


das
21-07-2008, 20:20
Quando usavo mysql potevo utilizzare CAST (0x... AS BINARY) per inserire dati in un blob.

Con FIREBIRD mi da errore, come posso fare ?

Grazie

das
22-07-2008, 07:56
Mi spiego meglio: come posso inserire dati in un campo blob con Firebird ?

Con mysql facevo così:

insert into tabella (CampoBlob) values (CAST (0x31256f as binary))

ma con Firebird non funziona più.

Come posso fare ?

das
23-07-2008, 15:29
up

cdimauro
23-07-2008, 19:23
Se mi spieghi esattamente cosa dovrebbe finirci nel BLOB con quel CAST, provo ad aiutarti. :)

das
24-07-2008, 18:02
Praticamente un file compresso in formato zip.
Con mysql avevo fatto così:
Supponiamo che il mio file sia: 0x12 34 56 33 rappresentando i byte in esadecimale.

Con :

INSERT INTO tabella (xFile) VALUES(CAST (0x12 34 56 33 AS BINARY))

potevo inserirlo all'interno del campo.

Con Firebird non funziona più.
Ho guardato nella guida di firebird ed in effetti cast non supporta as binary, ma un modo per inserire dati in un campo blob ci deve essere.

cdimauro
25-07-2008, 08:47
Ho capito. Sì, il CAST coi BLOB è limitato, ma... non è assolutamente lo strumento corretto (rendiamo grazie a MySQL che inculca questo "modello" :muro:).

In Python non ho avuto alcuna difficoltà a gestire BLOB binari contenenti dati di qualsiasi tipo (JPEG, MP3, AVI, ZIP, ecc. ecc. ecc.) e dimensione perché sono gestiti in maniera trasparente come gli altri tipi.

Esempio (supponendo che Cursor sia un cursore restituito dall'oggetto connection che è servito per collegarsi a FireBird):
Contenuto = '\x12\x34\x56\x33'
Cursor.execute('INSERT INTO tabella (xFile) VALUES(?)', (Contenuto, )

Con le PDO di PHP 5.2+ dovrebbe essere la stessa cosa (un mio collega usa questo linguaggio e l'ha provato con FireBird).

das
25-07-2008, 17:57
Grazie

das
26-07-2008, 11:27
Ho capito. Sì, il CAST coi BLOB è limitato, ma... non è assolutamente lo strumento corretto (rendiamo grazie a MySQL che inculca questo "modello" :muro:).

In Python non ho avuto alcuna difficoltà a gestire BLOB binari contenenti dati di qualsiasi tipo (JPEG, MP3, AVI, ZIP, ecc. ecc. ecc.) e dimensione perché sono gestiti in maniera trasparente come gli altri tipi.

Esempio (supponendo che Cursor sia un cursore restituito dall'oggetto connection che è servito per collegarsi a FireBird):
Contenuto = '\x12\x34\x56\x33'
Cursor.execute('INSERT INTO tabella (xFile) VALUES(?)', (Contenuto, )

Con le PDO di PHP 5.2+ dovrebbe essere la stessa cosa (un mio collega usa questo linguaggio e l'ha provato con FireBird).
Ho provato ma mi da errore di sintassi.

cdimauro
26-07-2008, 19:50
Scusami, ho dimenticato una parentesi alla fine:
Contenuto = '\x12\x34\x56\x33'
Cursor.execute('INSERT INTO tabella (xFile) VALUES(?)', (Contenuto, ))
Se hai altri problemi, chiedi pure. :)