lunes, 28 de enero de 2008

tinyint(1) es un Bit

Pues eso. Que tinyint(1) es un Bit.

¿Y qué significa? Significa que si defines un campo de una tabla de Mysql como Tinyint con un tamaño de 1, CakePHP lo considerará como un bit y cualquier valor que le intentes poner que no sea 1 ó 0 será convertido a 1.

En Mysql 5 ocurre exactamente eso (en versiones anteriores creo que no).

Es un poco "contraintuitivo" ya que la definición de tinyint es básicamente un byte (de 0 a 255).

En fin, yendo a lo práctico, si necesitas tener un campo tinyint para almacenar valores numéricos pequeños, algo normal para flags de estado e indicadores de tipos con pocas opciones, asígnale tamaño 2.

Esto lo he aprendido hoy, tras una hora y pico de desconcierto con un modelo que tiene un campo de "estado" que puede tomar valores 0, 1 y 2, y que siempre se guardaba como 1.

2 comentarios:

Freddy Noriega dijo...

gracias.

Unknown dijo...

Hola Fran,

Hoy he aprendido esto yo, jeje. Resulta que me ha pasado lo mismo: tenía un campo tinyint con tres estados (0, 1 y 2) y cuando escribía en el campo el valor 2 automáticamente se ponía a 1.
Espero que no se me olvide ;-P Lo he solucionado con un campo varchar(1). ¡Gracias y saludos!