php - telefono - tipos de datos en mysql workbench
Almacenar los ceros iniciales de enteros en la base de datos MySQL como INTEGER (4)
Necesito MySQL para almacenar números en un campo de enteros y mantener los ceros iniciales. No puedo usar la opción zerofill ya que mi campo actual es Bigint (16) y los números pueden variar en la cantidad de ceros iniciales. IE: 0001 - 0005, entonces es posible que se deba almacenar 008 - 010. No me preocupa la singularidad de los números (no se utilizan como ID ni nada), pero aún necesito que se almacenen preferentemente como INTS.
El problema al utilizar CHAR / VARCHAR y luego encasillar los valores como enteros en PHP significa que la clasificación de los resultados mediante consultas conduce a la clasificación alfanumérica, IE: SORT BY número ASC produciría
001
002
003
1
100
101
102
2
Claramente no en orden numérico, sino en orden alfanumérico, lo que no se desea.
Esperando algunas soluciones inteligentes :)
Cambie la estructura del campo y haga los Atributos UNSIGNED_ZEROFILL
para mantener los ceros.
Pero debes tener cuidado con la Longitud del campo, ya que devolverá todos los números de resto a ceros, así que pon la longitud de tu campo
Mantener los números almacenados como enteros.
Luego use la función LPAD()
para mostrar los números (izquierda) rellenados con ceros:
SELECT LPAD( 14, 7, ''0'') AS padded;
| padded |
-----------
| 0000014 |
Si el número de caracteres zerofill es variable, agregue otra columna en la tabla con esa longitud (zerofill).
No se puede almacenar entero con ceros iniciales. Una forma es mantenerlo tanto en varchar como en columnas int. En este caso, necesita dos columnas, un valor y el otro intValue y, al ordenar, puede usar intValue para ordenar. Esto es fácil de implementar.
Select Value from Table order by intValue;
La otra opción puede ser usar dos columnas, una valu y otra NumOfZero y usarlas para obtener los resultados deseados. Esto es complejo, pero podría ser ligero en la base de datos.
Todavía puede ordenar las columnas de cadena (CHAR / VARCHAR) como un entero usando CAST
ORDER BY CAST(`col_name` AS SIGNED) DESC
Por lo tanto, puede almacenarlos en campos de tipo CHAR / VARCHAR.