Ho un database MySQL contenente una tabella con una colonna di tipo binario. Mi piacerebbe essere in grado di proiettare quella colonna senza doverla attraversare, ad es. HEX()
. Lo strumento CLI mysql
ha un'opzione di configurazione o altri mezzi per visualizzare una rappresentazione di dati binari in un modo che non produrrà byte arbitrari per la mia console da interpretare in modi esilaranti/fastidiosi?Lo strumento CLI mysql fornisce un modo per visualizzare dati binari in modo da facilitare la console?
risposta
Dal momento che si desidera guardare la tabella per lo più per convenienza, creare una vista:
CREATE OR REPLACE VIEW myview AS
SELECT col1, HEX(col2) AS col2, col3, etc....
FROM table;
Poi, tutto quello che dovete fare è di riferimento myview
invece di table
:
SELECT * FROM myview;
È una soluzione anche se non è perfetta. – smartwjw
Il comportamento del client della riga di comando MySQL durante la visualizzazione di set di risultati con dati binari è sempre stato un fastidio per me, infatti ho trovato questa pagina perché ero ancora una volta infastidito dal client della riga di comando MySQL (scaricando dati binari nel mio nal guardando un set di risultati con colonne UUID binarie) e volevo risolvere il problema una volta per tutte :-)
Creare viste non è un'opzione per me (sto osservando dozzine di tabelle con colonne UUID binarie) e ho anche scoperto che è davvero fastidioso passare da SELECT *
alla digitazione di tutti i nomi di colonna (solo così HEX()
può essere applicato al valore di una colonna).
Alla fine mi sono inventato un creativo mod che fornisce ispirazione per soluzioni alternative a questo fastidio: Utilizzo di un comando personalizzato cercapersone per disinfettare l'output per il rendering del terminale. Ecco come funziona:
creare un file eseguibile (chmod + x) script Python con il seguente contenuto:
#!/usr/bin/python import binascii, string, sys for line in sys.stdin: line = line.rstrip() column, _, value = line.partition(': ') if any(c not in string.printable for c in value): sys.stdout.write("%s: %s\n" % (column, binascii.hexlify(value))) else: sys.stdout.write("%s\n" % line)
Avviare il client a riga di comando di MySQL come segue:
$ mysql --pager=/home/peter/binary-filter.py --vertical ...
Modificare il nome del percorso dello script Python come applicabile. Puoi anche inserire lo script nel tuo
$PATH
, in tal caso puoi semplicemente passare il nome all'opzione--pager
(simile a come userestiless
come cercapersone per il client MySQL).Ora, quando si
SELECT ...
, qualsiasi riga che mostra una colonna il cui valore contiene caratteri non stampabili è riscritto in modo che il valore completo è reso come caratteri esadecimali, simili ai risultati della funzione di MySQLHEX()
.
Disclaimer: Questo è lontano da una soluzione completa, per esempio Python frammento mostrai attende SELECT ... \G
formato di uscita (da cui l'opzione --vertical
) e testato per tutti cinque minuti quindi è destinata a contenere bug.
Il mio punto era dimostrare che il problema può essere risolto dal lato del client della riga di comando MySQL, perché è lì che si trova il problema!(questo è il motivo per cui mi sento indietro per definire le viste lato server - solo per rendere un client da riga di comando più facile :-P)
Per me non c'è alcun problema con le dimensioni del database, quindi userò due colonne diverse in ogni tabella, uno come binario (16) e il secondo come char (32) senza indicizzazione. entrambi avranno lo stesso valore. quando ho bisogno di cercare userò la colonna binaria, e quando ho bisogno di leggere userò char (32). c'è qualche problema con questo scenario?
Impostare le opzioni client MySQL in /etc/my.cnf
opere per me:
[client]
binary-as-hex = true
[mysql]
binary-as-hex = true
- 1. Uso di django per lo strumento CLI
- 2. C'è un modo per emulare lo strumento 'whois' usando php?
- 3. C'è un modo per visualizzare (o stampare) una definizione di metodo in modo programmatico nei binari?
- 4. C'è un modo per lasciare lo strumento di evidenziazione Okular in modo permanente?
- 5. mysqldump gestisce i dati binari in modo affidabile?
- 6. archivio dati binari mysql
- 7. Archiviazione dati per facilitare l'interpolazione dei dati in Python
- 8. memorizzazione di dati binari in mysql
- 9. Un modo semplice per visualizzare i file di dump postgresql?
- 10. Qual è il modo migliore per restituire grossi pezzi di dati binari da un servizio web?
- 11. Modo corretto per implementare l'applicazione console C#?
- 12. Il modo migliore per archiviare dati utente "extra" in MySQL?
- 13. R: c'è un modo per visualizzare una lista
- 14. modo migliore per conservare i dati in MySQL indicazioni
- 15. Modo efficiente per creare array di Numpy da file binari
- 16. Un modo più elegante per visualizzare null?
- 17. Modo più veloce per inserire simultaneamente i dati in MySQL
- 18. C'è un modo per cambiare con garbo i binari secret_key_base?
- 19. C'è un modo per visualizzare il codice sorgente di un metodo dalla console di Rails?
- 20. modo intuitivo per visualizzare forcella più attivo
- 21. Strumento per migrare da DB2 a MySQL
- 22. c'è un modo per visualizzare l'origine di un modulo all'interno della console python?
- 23. Strumento per la generazione di grafici da dati Xml
- 24. In che modo eseguire lo streaming da un processo?
- 25. C'è un modo per visualizzare un elenco di funzioni Preludio dalla console Haskell?
- 26. Leggi dati binari da Console.In
- 27. In che modo SAML fornisce realmente sicurezza?
- 28. Qual è il modo migliore per memorizzare dati binari (immagini, pdf, mp3, video ecc) in mysql e perché?
- 29. Qualsiasi modo per ottenere la colonna che causa com.microsoft.sqlserver.jdbc.SQLServerException: String o dati binari verrebbero troncati
- 30. C'è un modo per generare un url preselezionato per un oggetto S3 usando la CLI AWS?
Cosa c'è di sbagliato con 'HEX()'? Sembra la soluzione perfetta. – wallyk
Perché doverlo fare quando tutto ciò che voglio veramente è un rapido 'SELECT * ...' è abbastanza scomodo. –