Red de conocimientos sobre prescripción popular - Colección de remedios caseros - Problemas con el tipo de datos $número en la base de datos mysql

Problemas con el tipo de datos $número en la base de datos mysql

Los tipos de datos MySQL se dividen en las siguientes categorías:

Valores numéricos, normalmente tinyint, int, bigint y bigint.

Coma flotante/coma fija, normalmente flotante, doble, decimal y sinónimos relacionados.

Cadena, normalmente representada como char, varchar.

Hora y fecha, generalmente fecha, fechahora, hora, marca de tiempo.

Binario, normalmente binario, varbinary.

Tipo de bit

Tipo de enumeración

Tipo de colección

Objetos grandes como texto y blob

Documento Json type

1. Tipo numérico (no tipo de datos, no me malinterpretes) si se usa para almacenar números enteros, elige diferentes tipos según los diferentes rangos.

Los anteriores son algunos ejemplos de selección de números enteros. Integer tiene la gama más amplia de aplicaciones y puede usarse para almacenar números, marcas de tiempo y otros tipos de códigos convertidos en números, como IPv4. El ejemplo 1 usa int32 para almacenar direcciones IPv4, lo que ahorra espacio que simplemente usar cadenas. La tabla x1, campo ipaddr, usa la función inet_aton y usa la función inet_ntoa al buscar.

Verifique el uso de espacio en disco, t3 ocupa la mayor cantidad y t1 ocupa la menor cantidad. Por lo tanto, si el rango de almacenamiento de números enteros tiene un límite superior fijo y no es necesario ampliarlo en el futuro, se recomienda elegir el tipo más pequeño. Por supuesto, también se aplica a otros tipos. root@ytt-PC:/var/lib/MySQL/3305/ytt # ls-sihl dosis total 3,0 g 354182581m-RW-R-1 my SQL 860m 65438 11 de febrero: 36t1. -1 MySQL MySQL 988m 65438 10 de febrero 11:38 T2 EII 3541823 1.2g-rw-r-65438.

2. ¿Número de punto flotante/número de punto fijo primero? Los números de coma flotante, flotante y doble, representan números de coma flotante. La simple diferencia es que, de forma predeterminada, float ocupa 4 bytes. La p en float(p) representa la precisión mínima de bits enteros. Si p > 24, se convierte directamente en doble, ocupando 8 Byte. El valor máximo de p es 53, pero el cálculo del valor máximo no es exacto. ¿Di más? Los valores de punto fijo, incluidos los valores decimales y sinónimos, se almacenan en lugares enteros y decimales respectivamente, y la precisión máxima efectiva no puede exceder 65. Entonces, la diferencia con float es el almacenamiento preciso. La mejor definición de almacenamiento preciso o cálculo preciso es decimal. El ejemplo 3 crea una tabla y1 y asigna diferentes tipos a los campos F1, F2 y F3. MySQL-(ytt/3305)- gt; crear tabla y1 (f1 número de punto flotante, f2 doble precisión, f3 decimal (10, 2)); la consulta es normal, 0 filas están afectadas (0,03 segundos)

No. En tercer lugar, los tipos de carácter son tan versátiles como la cirugía plástica. Se utiliza para almacenar caracteres, cadenas y todos los tipos desconocidos de MySQL. ¡Se puede decir simplemente que es un tipo universal!

Char(10) indica soporte máximo para almacenamiento de 10 caracteres. Aunque varhar (10) puede almacenar la misma cantidad de caracteres que char (10), la diferencia es que el tipo varchar almacena el tamaño real y el tamaño de almacenamiento teórico de char es fijo. El número específico de bytes está relacionado con el juego de caracteres. Ejemplo 4: Por ejemplo, en la tabla t4 siguiente, los dos campos C1 y C2 son char y varchar respectivamente. MySQL-(ytt/3305)- gt; crear tabla t4 (c1 char(20), C2 varchar(20)); la consulta es normal, 0 filas se ven afectadas (0,02 segundos)

Entonces, al seleccionar char y Cuando utilice varchar, preste atención a si existe un rango de valores adecuado.

Por ejemplo, para valores de longitud fija, debe elegir char; para valores inciertos, elija varchar.

4. Tipo de fecha El tipo de fecha incluye fecha, hora, fecha hora, marca de tiempo y año. El año ocupa 1 byte y la fecha ocupa 3 bytes.

La hora, la hora, la marca de tiempo y la fecha y hora ocupan 3 bytes, 4 bytes y 8 bytes respectivamente sin decimales; la parte decimal se calcula por separado para el uso del disco, como se muestra en la siguiente tabla.

Haga clic para ingresar una descripción de la imagen.

Haga clic para ingresar una descripción de la imagen.

Nota: La marca de tiempo es un número entero almacenado en int32 y el rango de valores es '1970-01-01 00:00:01.000000' a '2038-01-65438'. El rango de fecha y hora es "1000-01-01 00:00.000000" a "9999-12-31 23:59:59.999". ?

En resumen, la selección de dichas fechas sigue los siguientes principios:

1. Si la hora puede exceder el rango de marca de tiempo, se prefiere la fecha y hora. 2. Si necesita obtener el valor del año por separado, como dividir por año, buscar por año, etc. , sería mejor agregar un tipo de año a la tabla para participar. 3. Si necesita obtener la fecha o la hora por separado, es mejor almacenarla por separado en lugar de simplemente usar la fecha, hora o la marca de tiempo. Cuando busque más tarde, agregue filtrado de funciones para evitar el costo adicional de escribir SQL más adelante.

4. Si es necesario ahorrar milisegundos, es mejor utilizar las características del tipo de tiempo en lugar de utilizar el tipo de carácter directamente. También es necesario considerar los recursos adicionales consumidos por la conversión de tipos interna de MySQL.

Ejemplo 5

Crea una tabla t5 y deja todos los campos que puedan ser necesarios, para que sea más fácil escribir sentencias SQL en el futuro.

Por supuesto, esta situación ocupará espacio adicional en el disco. Si desea encontrar un equilibrio entre la facilidad de uso y el uso de un gran espacio, puede utilizar columnas virtuales MySQL para cálculos en tiempo real. Por ejemplo, supongamos que el campo c5 no existe y desea obtener el resultado de c5. MySQL-(ytt/3305)- gt; elimine c5 al cambiar la tabla t5 y agregue c5. El año generado siempre es (año(c1)) virtual; consulta correcta, 1 fila afectada (2,46 segundos) registro: 1? Duplicados: 0? Advertencia: 0

Tipo binario de verbo (abreviatura de verbo)

Binary y varbinary corresponden al almacenamiento binario de char y varchar, y las características relacionadas son las mismas. La diferencia es la siguiente:

binary(10)/varbinary(10) no representa el número de caracteres, sino el número de bytes.

Los terminadores de línea son diferentes. El terminador de línea para char es \0 y el terminador de línea para binario es 0x00.

Debido a que se trata de almacenamiento binario, las reglas de codificación y clasificación de caracteres no son válidas directamente.

Ejemplo 6

Veamos este ejemplo simple de acceso binario, o la variable anterior @ a.

¡Recuerda! Aquí debe calcular la cantidad de bytes ocupados por @a de antemano para evitar el desbordamiento de la memoria.

6. Tipo de bit

Bit es el tipo de bit almacenado en MySQL. Admite hasta 64 bits y se almacena directamente en modo binario. Generalmente se usa para almacenar información de estado. Como género, autenticidad, etc. Tiene las siguientes características:

1. Para el bit (8), si simplemente se almacena 1 bit, 0000001 se completa con ceros a la izquierda. 2. Los datos decimales se pueden filtrar directamente al realizar consultas. 3. Si este campo está indexado, MySQL no realizará la conversión de tipos por sí solo y solo podrá usar binario para filtrar.

Ejemplo 7

Cree la tabla c1 y defina un dígito para el campo género.

MySQL-(ytt/3305)- gt; Crear tabla c1 (bit de género (1)); La consulta es normal, 0 filas se ven afectadas (0,02 segundos)

MySQL-(ytt/3305)- gt; ¿Seleccionar reparto (género sin firmar)? f 1’ de c 1; - | f1? | | 0 | 1 | 2 filas en la colección (0,00 segundos)

Lo mismo ocurre con los datos filtrados, ya sean binarios o decimales. MySQL - (ytt/3305) - > SELECCIONE conv(género, 16, 10) COMO GÉNERO -> DESDE c1 ¿DONDE GÉNERO = b'1'? - |Género| - | 1? | - 65438 0 filas en la colección (0,00 segundos) MySQL - (ytt/3305) -> SELECCIONE conv(género, 16, 10) COMO GÉNERO -> DESDE c1 DONDE GÉNERO = '1' - |GÉNERO - | | - 65438 Fila 0 en la colección (0,00 segundos)

De hecho, dicho escenario también se puede definir como char(0), que también es un uso muy optimizado similar a bit.

MySQL-(ytt/3305)-gt; Crear tabla C2 (gender char(0)); La consulta es normal, 0 filas están afectadas (0,03 segundos)

Ahora doy la tabla c1 Una prueba simple de datos.

MySQL-(ytt/3305)- gt; seleccione recuento (*) de c1; - | recuento (*) - | 33554432 | p>

Inserte todos los datos de c1 en c2.

MySQL-(ytt/3305)-gt; Insertar en c2 seleccionar si (género = 0, '', nulo) de c 1; Consulta correcta, 33554432 filas afectadas (2 minutos 18,80 segundos): 33554432? Duplicados: 0? Advertencia: 0

El uso del disco de las dos tablas es similar. root@ytt-PC:/var/lib/MySQL/3305/ytt # ls-sihl dosis total 1,9 g 4085684 933m-RW-R-1 mi SQL 932m 1110:16c 1. -1 MySQL MySQL 916m 65438 11 de febrero 10:22 C2.

Los métodos de recuperación son ligeramente diferentes, pero la eficiencia es similar. Por tanto, los tipos de personalidad son de hecho tipos universales.

7. Tipo de enumeración

El tipo de enumeración es enum. Es adecuado planificar todos los valores conocidos con anticipación y es mejor no agregar nuevos valores más adelante. El tipo de enumeración tiene las siguientes características:

1. La ocupación máxima es de 2 bytes. 2. Admite hasta 65535 elementos diferentes. 3.MySQL almacena los siguientes objetos en segundo plano, a saber, tinyint o smallint, y los subíndices comienzan desde 1. 4. Ordene por subíndice en lugar de por el tipo de datos de los elementos internos. Así que presta especial atención a esto.

Realización 8

Crear la tabla t7. MySQL-(ytt/3305)- gt;Crear tabla t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','SQL server') ;La consulta es normal, 0 filas están afectadas (0,03 segundos)

8. Tipo de colección

El tipo de colección es similar a una enumeración, pero es necesario saber de antemano cómo hacerlo. muchos elementos hay. La colección tiene las siguientes características:

1. La ocupación máxima es de 8 bytes, int64.

2. El almacenamiento interno tiene forma de bits binarios y los subíndices correspondientes son 1, 2, 4, 8,..., potencia (2, 63) si se ve en decimal. 3. Admite hasta 64 elementos diferentes e inserta y elimina directamente elementos duplicados. 4. Los elementos se pueden insertar en combinación. Por ejemplo, los subíndices 1 y 2 se pueden insertar juntos y el 3 se puede insertar directamente.

Ejemplo 9

El campo c7 c1 de la tabla está definido como un tipo de colección y contiene 8 valores, es decir, el valor máximo en la siguiente tabla es pow(2,7 ).

MySQL-(ytt/3305)-gt;Crear tabla c7(c1 collection(' mysql ', ' oracle ', ' dble ', ' postgresql ', ' mongodb ', ' redis ', ' db2 ', 'Servidor SQL'); consulta correcta, 0 filas afectadas (0,02 segundos)

Inserte todas las combinaciones del 1 al 128

MySQL-(ytt/3305)-gt. Utilice recursividad ytt_number(CNT)AS(SELECT 1 AS CNT UNION ALL SELECT CNT 1 FROM ytt_number WHERE CNT lt;pow(2,7))SELECT * FROM ytt_number La consulta está bien, 128 filas se ven afectadas (0,01 segundos) Registros: 128? Duplicados: 0? Advertencia: 0

9. Uso de tipos de datos en funciones almacenadas

Además de las variables declaradas explícitamente, variables de sesión predeterminadas en funciones. El tipo de datos es muy débil. y se puede convertir a voluntad con diferentes valores dados.

Ejemplo 10

Defina una función que devuelva el producto de dos parámetros dados. Hay dos variables en la definición, una es. v_tmp se define explícitamente como int64 y el otro es @vresult, que cambia el tipo con el valor dado

MySQL-(ytt/3305)-gt; seleccione ytt_sample_data_type(1111,222) 'resultado'. ; - |¿resultado? | - |el resultado es: '246642' | - 0 filas en 65438 colección (0,00 segundos)

Resumen

Este artículo presenta brevemente los tipos de datos básicos de MySQL. y utiliza algunos ejemplos fáciles de entender para clasificar estos tipos. En escenarios reales, recomendamos elegir el tipo más apropiado y no todos los tipos de datos. Principio de maximización simple. Por ejemplo, puede usar varchar (100). varchar(1000).