2009-03-30 14 views

Respuesta

24

Si necesita almacenar un año en la base de datos, o bien desea utilizar un tipo de datos Integer (si está inactivo solo) almacenando el año) o un tipo de datos DateTime (que implicaría almacenar una fecha que básicamente es 1/1/1990 00:00:00 en formato).

+7

** No sea flojo y "solo use int". ** Calcule su tipo de datos correctamente, una int de dos bytes es una mejor opción.Al almacenar años de 4 dígitos en 4 bytes, está desperdiciando más recursos que solo espacio en disco. Su sistema siempre estará cargado al usar el doble de la memoria caché, presionando el doble de la cantidad de datos IO, etc. para esta columna. Es un pan comido, consulte: http://dba.stackexchange.com/q/4968 –

0

¿Solo un año, nada más? ¿Por qué no usar un número entero simple?

+0

Ohh Dios ,, Por sentido común – peter

+4

¡Hola! ¿Por qué estás tratando de hacer las cosas tan simples? ¡Nos quedaremos sin preguntas! –

1

Use entero si todo lo que necesita almacenar es el año. También puede usar datetime si cree que habrá cálculos basados ​​en la fecha al consultar esta columna

+0

gracias ,, ese es mi error – peter

25

4 bytes regulares INT es demasiado grande, ¡es una pérdida de espacio!

No dice qué base de datos está utilizando, por lo que no puedo recomendar un tipo de datos específico. Todo el mundo dice "use integer", pero la mayoría de las bases de datos almacenan enteros a 4 bytes, que es mucho más de lo que necesita. Debe usar un entero de dos bytes (smallint en SQL Server), que conservará mejor el espacio.

+1

En la mayoría de los casos, desperdiciar espacio usando un int es preferible a usar un tipo de datos más pequeño, ya que la mayoría de los procesadores modernos son más eficientes. 4 bytes (32 bit) que tipos de datos más pequeños. – Ender

+0

@Ender, en realidad no estás haciendo cálculos matemáticos con estos valores, es más un proceso de búsqueda y almacenamiento. Podrá almacenar más valores en RAM si son más pequeños, podrá leer más valores del disco si son más pequeños, etc. No pude encontrar ningún artículo que respalde su idea. http://dba.stackexchange.com/q/4968 –

+1

Todos los programas compilan al código de máquina al final y los números se cargan en los registros. En arquitecturas de CPU modernas, todos los registros son de 32 bits o 64 bits. Entonces su sistema RDBMS tendrá que poner esos números en registros para hacer una comparación con el fin de satisfacer las condiciones en su consulta. Y en el caso de tiny int y small int, tiene que hacer una conversión cada vez, lo que consume mucho tiempo. No puede encontrar un artículo OFICIAL que apoye mi punto O su punto, ya que generalmente es un intercambio entre CPU e IO ya que el uso de int aumentará el tamaño del índice y requerirá más IO – Ender

9

Oye, puedes usar año() tipo de datos en MySQL Está disponible en formato de dos o cuatro dígitos.

Nota: Los valores permitidos en formato de cuatro dígitos: 1901 a 2155. Los valores permitidos en formato de dos dígitos: 70 a 69 años, que representa años 1970-2069

2

Almacenamiento de un "año" en MSSQL, idealmente, dependerá sobre lo que está haciendo con él y cuál será el significado de ese "año" para su aplicación y base de datos. Dicho esto, hay algunas cosas que decir aquí. No hay "DataType" por año a partir de 2012 en MSSQL. Me inclinaría hacia el uso de SMALLINT ya que solo tiene 2 bytes (ahorrándote 2 de los 4 bytes que exige INT). Su limitación es que no puede tener un año anterior a 32767 (a partir de SQL Server 2008R2). Realmente no creo que SQL sea la base de datos de elección dentro de diez mil años, mucho menos 32767. Puede considerar INT como la función Año() en MSSQL si convierte el tipo de datos "FECHA" a INT. Como dije, depende de dónde se obtienen los datos y hacia dónde se dirigen, pero SMALLINT debería estar bien. INT sería excesivo ... a menos que tenga otros motivos como el que mencioné anteriormente o si los requisitos del código lo necesitan en formato INT (por ejemplo, integración con la aplicación existente). Lo más probable es que SMALLINT esté bien.

0

El almacenamiento puede ser solo una parte del problema. ¿Cómo se usará este valor en una consulta?

¿Se va a comparar con otros tipos de datos de fecha y hora o todas las filas asociadas también tienen valores numéricos?

¿Cómo manejarías un cambio en los requisitos? ¿Con qué facilidad podría reaccionar a una solicitud para reemplazar el año con un segmento de tiempo más pequeño? es decir, ¿ahora lo quieren desglosado por trimestres?

Un tipo numérico se puede utilizar fácilmente en una consulta de fecha y hora al tener una tabla de búsqueda para unir con elementos como fechas de inicio y finalización (1/1/X a 12/31/x), etc.