Algo raro con un campo BIT en MySQL

342 views
Skip to first unread message

Antonio Cardinaux

unread,
Sep 23, 2021, 11:37:52 AM9/23/21
to [oohg]
Me está pasando algo raro con los campos BIT de tablas de MySQL. Todos los días actualizo las tablas de una base de datos de prueba, con una migración de tablas DBF que hago de un sistema que usa la gente de adonde trabajo.
Como algunas de esas tablas DBF tienen campos lógicos, los campos correspondientes en las tablas MySQL, los declaro como tipo BIT(1). Hasta hoy no habia tenido problemas porque no me habia tocado hacer una comparación con algún campo de ese tipo. Hoy me tocó, y veo que si en la línea de comandos de MySQL, hago 

SELECT campo_tipo_bit FROM tabla

me arroja un dibujo, tipo carita. Como no sabia como interpretar ese dibujo, lo que hice fue:

SELECT IF(campo_tipo_bit,'Verdadero','Falso') AS campo_tipo_bit FROM tabla

y ahi me arrojó valor verdadero, para todos los registros, cuando en realidad en la tabla DBF los campos correspondientes o bien figuran como .F. o vacio. Si me fijo en el archivo CSV que voy a importar en MySQL, en la columna que corresponde a esos campos hay un valor 0, lo cual esta bien, pero por alguna razón al hacer la migración aparece como verdadero.
¿Que puede estar pasando?

Antonio
Sistemas
Resipol

Nippur Lagash

unread,
Sep 23, 2021, 12:37:51 PM9/23/21
to oo...@googlegroups.com
Hola Antonio, estas confundiendo campo bit con boolean.

Ese select te sirve si el campo es booleano, pero no para campos bit

Saludos,
Fer.MDQ

--
Has recibido este mensaje porque estás suscrito al grupo "[oohg]" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a oohg+uns...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/66557a78-a3b5-4146-b3e1-30000366bf8an%40googlegroups.com.


--
Nippur
Mar del Plata
Buenos Aires
Argentina

Nippur Lagash

unread,
Sep 23, 2021, 12:57:46 PM9/23/21
to oo...@googlegroups.com
A modo de ejemplo, en una tabla de test (con 8 registros) agregué un campo bit.

UPDATE test1 SET campo_bit=b'0' WHERE id IN (1,3,5,7);
UPDATE test1 SET campo_bit=b'1' WHERE id IN (2,4,6,8);

SELECT * FROM test1 WHERE  campo_bit = b'0';

Salida:
image.png

Saludos,
Fer.MDQ

Nippur Lagash

unread,
Sep 23, 2021, 1:14:58 PM9/23/21
to oo...@googlegroups.com
Sigo jajaja, tu consulta quedaría así (dependiendo de cómo hayas guardado los datos)

SELECT
   id,
   BIN(campo_bit) AS Convertido,
   (CASE
       WHEN BIN(campo_bit)=0 THEN 'Falso'
       WHEN BIN(campo_bit)=1 THEN 'Verdadero'
   END) AS campo_bit
FROM test1;

Salida:
image.png
Saludos,
Fer.MDQ

Antonio Cardinaux

unread,
Sep 23, 2021, 1:50:20 PM9/23/21
to oo...@googlegroups.com
Gracias Fer por la ayuda, tus ejemplos me ayudaron, pero debe haber algún otro tipo de problema en el momento en que los datos pasan del archivo CSV a la tabla MySQL, porque haciendolo de acuerdo a tu último ejemplo, me siguen dando verdadero valores que cuando veo la tabla DBF están en Falso, y lo raro es que si consulto el archivo CSV esa columna está en 0. 

Esto es parte del archivo CSV, lo abrí con el NOTEPAD e hice una captura de pantalla, lo resaltado serían los campos lógicos de la tabla DBF , transformados 

image.png

Así es como creo la tabla en MySQL, bueno la parte inicial de como creo la tabla.
image.png

y con esta sentencia levanto el contenido del archivo CSV.

cSql:="LOAD DATA LOCAL INFILE '" +cTxtFile +"' INTO TABLE " +cTabla +" character set latin1"
 cSql+="FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'"      

Bueno en cTxtFile va el nombre de la tabla a importar.



--
Antonio Cardinaux - Lanús - Pcia. de  Buenos Aires - Argentina

Nippur Lagash

unread,
Sep 23, 2021, 1:55:21 PM9/23/21
to oo...@googlegroups.com
Hola Antonio, entonces debes cambiar el tipo de campo, de bit a char o a tinyint(1) si en el csv que usas para importar lo ves como 0 o 1.

Saludos,
Fer.MDQ.

Antonio Cardinaux

unread,
Sep 23, 2021, 3:32:00 PM9/23/21
to oo...@googlegroups.com
Cambiando BIT por TINYINT funcionó. Gracias de nuevo Fer.

Reply all
Reply to author
Forward
0 new messages