Ver Mensaje Individual
  #7 (permalink)  
Antiguo 22/02/2014, 06:23
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Tipo de datos Tintyint

Bueno, ahora te lo aclaro entonces:
No puedes poner el uno (1) entre comillas sin indicar la "b" de bit, porque se va de rango.
Miremosló así y verás el efecto:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS t;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> CREATE TABLE t (b BIT(1));
  5. Query OK, 0 rows affected (0.00 sec)
  6.  
  7. mysql> INSERT INTO t VALUES(b'0');
  8. Query OK, 1 row affected (0.02 sec)
  9.  
  10. mysql> INSERT INTO t VALUES(b'1');
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> INSERT INTO t VALUES('1');
  14. ERROR 1406 (22001): Data too long for column 'b' at row 1
  15. mysql> INSERT INTO t VALUES(1);
  16. Query OK, 1 row affected (0.00 sec)
  17.  
  18. mysql> SELECT (b+0) b FROM t;
  19. +------+
  20. | b    |
  21. +------+
  22. |    0 |
  23. |    1 |
  24. |    1 |
  25. +------+
  26. 3 rows in set (0.00 sec)
Si en lugar de un sólo bit, pongo más, podemos ver el número que realmente se generaba:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS t;
  2. Query OK, 0 rows affected (0.01 sec)
  3.  
  4. mysql> CREATE TABLE t (b BIT(8));
  5. Query OK, 0 rows affected (0.05 sec)
  6.  
  7. mysql> INSERT INTO t VALUES(b'0');
  8. Query OK, 1 row affected (0.00 sec)
  9.  
  10. mysql> INSERT INTO t VALUES(b'1');
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> INSERT INTO t VALUES('1');
  14. Query OK, 1 row affected (0.00 sec)
  15.  
  16. mysql> INSERT INTO t VALUES(1);
  17. Query OK, 1 row affected (0.00 sec)
  18.  
  19. mysql> SELECT (b+0) b FROM t;
  20. +------+
  21. | b    |
  22. +------+
  23. |    0 |
  24. |    1 |
  25. |   49 |
  26. |    1 |
  27. +------+
  28. 4 rows in set (0.00 sec)
¿Ver cómo el "1" se transforma en 49?
Es porque sin el bit se interpreta como caracter "1" y hace una conversión implícita según charset.
Mi sugerencia sería que si quieres usar la sintaxis ortodoxa, bien, pero de lo contrario, pon los números sin apóstrofos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)