una puedo problema importar grande exportar error datos como mysql console binary-data

problema - no puedo importar base de datos mysql



¿La herramienta CLI de mysql proporciona una manera de mostrar datos binarios de una manera amigable para la consola? (4)

Tengo una base de datos MySQL que contiene una tabla con una columna de tipo binario. Me gustaría poder proyectar esa columna sin tener que ejecutarla, por ejemplo, HEX() . ¿La herramienta de CLI de mysql tiene una opción de configuración u otro medio para mostrar una representación de datos binarios de una manera que no genere bytes arbitrarios para que mi consola los interprete de manera hilarante / molesta?


Como quiera mirar la mesa principalmente para mayor comodidad, cree una vista:

CREATE OR REPLACE VIEW myview AS SELECT col1, HEX(col2) AS col2, col3, etc.... FROM table;

Entonces, todo lo que tienes que hacer es hacer referencia a myview lugar de a la table :

SELECT * FROM myview;


El comportamiento del cliente de línea de comandos de MySQL al ver los conjuntos de resultados con datos binarios siempre ha sido una molestia para mí, de hecho encontré esta página porque una vez más me molestaba el cliente de línea de comandos de MySQL (volcando datos binarios en mi terminal cuando miraba en un conjunto de resultados con columnas UUID binarias) y quería resolver el problema de una vez por todas :-)

Crear vistas realmente no es una opción para mí (estoy viendo docenas de tablas con columnas UUID binarias) y también encontré que es realmente molesto cambiar de SELECT * a escribir todos los nombres de las columnas (simplemente HEX() se puede aplicar al valor de una columna).

Eventualmente, se me ocurrió un truco creativo que proporciona inspiración para soluciones alternativas a esta molestia: el uso de un comando de pager personalizado para desinfectar la salida para la renderización del terminal. Así es como funciona:

  1. Cree un script ejecutable (chmod + x) Python con los siguientes contenidos:

    #!/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)

  2. Inicie el cliente de línea de comandos MySQL de la siguiente manera:

    $ mysql --pager=/home/peter/binary-filter.py --vertical ...

    Cambie la ruta del script de Python según corresponda. También puede colocar el script en $PATH , en ese caso puede simplemente pasar el nombre a la opción --pager (similar a como usaría less como un pager para el cliente MySQL).

  3. Ahora cuando SELECT ... , cualquier línea que muestre una columna cuyo valor contenga caracteres no imprimibles se reescribe para que el valor completo se represente como caracteres hexadecimales, similar a los resultados de la función HEX() de MySQL.

Descargo de responsabilidad: Esto dista mucho de ser una solución completa, por ejemplo, el fragmento de Python que presenté espera el resultado del formato SELECT ... /G (de ahí la opción --vertical ) y lo probé durante los cinco minutos, por lo que está destinado a contener errores.

Mi objetivo era mostrar que el problema se puede resolver del lado del cliente de la línea de comandos de MySQL, ¡porque ahí es donde está el problema! (Esta es la razón por la que se siente al revés para mí definir las vistas del lado del servidor, solo para hacer que un cliente de línea de comando sea más fácil de usar :-P)


Para mí no hay problema con el tamaño de la base de datos, así que usaré dos columnas diferentes en cada tabla, una como binaria (16) y la segunda como char (32) sin indexar. ambos tendrán el mismo valor. cuando necesite buscar, usaré la columna binaria, y cuando necesite leer, usaré char (32). ¿Hay algún problema con este escenario?


Establecer las opciones de cliente mysql en /etc/my.cnf me funciona:

[client] binary-as-hex = true [mysql] binary-as-hex = true