Maison >base de données >tutoriel mysql >Quels sont les types de données de MySQL ?

Quels sont les types de données de MySQL ?

青灯夜游
青灯夜游original
2020-09-27 17:00:4872473parcourir

Les types de données MySQL incluent : BOOL, TINY INT, INT, BIG INT, FLOAT, DOUBLE, DECIMAL, CHAR, VARCHAR, TINY TEXT, TEXT, Date, DateTime, TimeStamp, Year, etc.

Quels sont les types de données de MySQL ?

1. Les types de données MySQL

comprennent principalement les cinq catégories suivantes :

Types entiers : BIT, BOOL, TINY INT, SMALL INT, MEDIUM INT, INT, BIG INT

Type à virgule flottante : FLOAT, DOUBLE, DECIMAL

Type de chaîne : CHAR, VARCHAR, TINY TEXT, TEXT, MEDIUM TEXT, LONGTEXT, TINY BLOB, BLOB, MEDIUM BLOB, LONG BLOB

Type de date : Date, DateTime, TimeStamp, Time, Year

Autres types de données : BINARY, VARBINARY, ENUM, SET, Geometry, Point, MultiPoint, LineString, MultiLineString, Polygon, GeometryCollection, etc.

1. Type entier

MySQL数据类型 含义(有符号)
tinyint(m) 1个字节  范围(-128~127)
smallint(m) 2个字节  范围(-32768~32767)
mediumint(m) 3个字节  范围(-8388608~8388607)
int(m) 4个字节  范围(-2147483648~2147483647)
bigint(m) 8个字节  范围(+-9.22*10的18次方)

Si non signé est ajouté à la plage de valeurs, la valeur maximale sera être doublé. Par exemple, la plage de valeurs de tinyint non signé est (0 ~ 256).

Le m dans int(m) représente la largeur d'affichage dans le jeu de résultats de la requête SELECT. Cela n'affecte pas la plage de valeurs réelle ou la largeur d'affichage. Je ne sais pas à quoi sert ce m.

2. Type à virgule flottante (float et double)

MySQL数据类型 含义
float(m,d) 单精度浮点型    8位精度(4字节)     m总个数,d小数位
double(m,d) 双精度浮点型    16位精度(8字节)    m总个数,d小数位

Supposons qu'un champ soit défini comme float(6,3) Si un nombre 123.45678 est inséré. , le réel La base de données stocke 123 457, mais le nombre total est basé sur le nombre réel, qui est composé de 6 chiffres. La partie entière comporte jusqu'à 3 chiffres. Si vous insérez le numéro 12.123456, le numéro stocké est 12.1234. Si vous insérez 12.12, le numéro stocké est 12.1200.

Numéro à virgule fixe.

Les types à virgule flottante stockent des valeurs approximatives dans la base de données, tandis que les types à virgule fixe stockent des valeurs exactes dans la base de données.

le paramètre décimal (m, d) mc08e8cc7c94c9c94cd46cecee9e53ddd255),

Donc varchar(4), stocker 3 caractères occupera 4 octets.

3.La vitesse de récupération des chaînes de type Char est plus rapide que celle du type varchar.
varchar et texte :

1. Varchar peut spécifier n, le texte ne le peut pas. Le stockage interne de varchar est le nombre réel de caractères stockés + 1 octet (n62c3e82064975d0dbaa1c86b1c612d16 255), le texte est le nombre réel de caractères + 2 caractères

sections.

2. Le type de texte ne peut pas avoir de valeur par défaut.

3.varchar peut créer directement un index, et le texte doit spécifier le premier nombre de caractères pour créer un index. La vitesse de requête de varchar est plus rapide que celle du texte Lorsque les index sont créés, l'index du texte ne semble pas fonctionner.

5. Les données binaires (_Blob)

1 _BLOB et _text sont stockés de différentes manières, _TEXT est stocké en mode texte, le stockage en anglais est sensible à la casse, et _Blob Il est stocké au format binaire, quelle que soit la casse.

2. Les données stockées dans _BLOB ne peuvent être lues que dans leur ensemble.

3._TEXT peut spécifier le jeu de caractères, _BLO n'a pas besoin de spécifier le jeu de caractères.

6. Type de date et d'heure

MySQL数据类型 含义
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间

Si vous définissez un champ comme horodatage, les données temporelles de ce champ seront automatiquement actualisées lorsque d'autres champs sont modifiés. , les champs de ce type de données peuvent donc stocker l'heure à laquelle cet enregistrement a été modifié pour la dernière fois.

Attributs de type de données

MySQL关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集

2. Longueur et plage des types de données MYSQL

Liste de chaque type de données et longueur d'octet :

Type de données Longueur en octets Plage ou utilisation
Bit 1 Non signé[0,255], signé [-128,127 ], Remarque du blog Tianyuan : Les types booléens BIT et BOOL occupent tous deux 1 octet
TinyInt 1 Entier [0,255]
SmallInt 2 Non signé [0,65535], signé [-32768,32767]
MediumInt 3 Non signé [0,2^24-1], signé [-2^23, 2^23-1]] td>
Int 4 Non signé [0,2^32-1], oui Signé [-2^31,2^31 -1]
BigInt 8 Non signé [0,2^ 64-1], signé [-2^63 ,2^63 -1]
Float(M,D) 4 Nombre à virgule flottante simple précision. Tianyuan Blog rappelle que D ici est la précision. Si De7a89b6c923798c707f3178a1577548f24, il sera automatiquement converti en type DOUBLE.
Double(M,D) 8 Virgule flottante double précision.
Décimal(M,D) M+1 ou M+2 Nombre à virgule flottante décompressé, l'utilisation est similaire à FLOAT et DOUBLE, Tianyuan Blog vous rappelle que si le type de données Decimal est utilisé dans ASP, le Decimal lu directement à partir de la base de données devra peut-être être converti en type Float ou Double avant l'opération.
Date 3 Affiché au format AAAA-MM-JJ, par exemple : 2009-07-19
Date Heure 8 Affiché au format AAAA-MM-JJ HH:MM:SS, par exemple : 2009 -07-19 11:22:30
TimeStamp 4 Affiché au format AAAA-MM-JJ, par exemple : 2009-07 -19
L'heure 3 est affichée au format HH:MM:SS. Par exemple : 11:22:30
Année 1 est affiché au format AAAA. Par exemple : 2009
Char(M) M
数据类型 字节长度 范围或用法
Bit 1 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节
TinyInt 1 整数[0,255]
SmallInt 2 无符号[0,65535],有符号[-32768,32767]
MediumInt 3 无符号[0,2^24-1],有符号[-2^23,2^23-1]]
Int 4 无符号[0,2^32-1],有符号[-2^31,2^31-1]
BigInt 8 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1]
Float(M,D) 4 单精度浮点数。天缘博客提醒这里的D是精度,如果D9619da2a8aaf96511a2e6ccc02a2999f24则会自动被转换为DOUBLE型。
Double(M,D) 8  双精度浮点。
Decimal(M,D) M+1或M+2 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。
Date 3 以YYYY-MM-DD的格式显示,比如:2009-07-19
Date Time 8 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30
TimeStamp 4 以YYYY-MM-DD的格式显示,比如:2009-07-19
Time 3 以HH:MM:SS的格式显示。比如:11:22:30
Year 1 以YYYY的格式显示。比如:2009
Char(M) M

定长字符串。

VarChar(M) M 变长字符串,要求M63919118cea206f0e48b3789fa9d5c77=). Nous pouvons utiliser la fonction MD5() pour générer la valeur de hachage, nous pouvons utiliser SHA1() ou CRC32(), ou nous pouvons utiliser notre propre logique d'application pour calculer la valeur de hachage. N'oubliez pas que les valeurs de hachage numériques peuvent être stockées de manière très efficace. De même, si un algorithme de hachage produit des chaînes avec des espaces de fin, ne les stockez pas dans des colonnes CHAR ou VARCHAR ; elles seront affectées par la suppression de l'espace de fin.

Les index de hachage synthétiques sont particulièrement utiles pour les colonnes de données BLOB ou TEXT. Une recherche utilisant une valeur d'identifiant haché est beaucoup plus rapide que la recherche dans la colonne BLOB elle-même.

③ Évitez de récupérer de grandes valeurs BLOB ou TEXT lorsque cela n'est pas nécessaire. Par exemple, une requête SELECT * n'est pas une bonne idée à moins que vous puissiez être sûr que la clause WHERE en tant que contrainte ne trouvera que les lignes de données requises. Sinon, vous pourriez transmettre un grand nombre de valeurs sur le réseau sans aucun but. C'est également un exemple où cela nous aide à stocker les informations d'identification BLOB ou TEXT dans une colonne d'index synthétique. Vous pouvez effectuer une recherche dans la colonne d'index pour déterminer quelles lignes de données sont nécessaires, puis récupérer la valeur BLOB ou TEXT des lignes de données qualifiantes.

④ Séparez les colonnes BLOB ou TEXT en tableaux séparés. Dans certains environnements, déplacer ces colonnes de données vers une deuxième table de données est judicieux si cela vous permet de convertir les colonnes de données de la table de données d'origine dans un format de ligne de longueur fixe. Cela réduit la fragmentation dans la table principale et vous offre les avantages en termes de performances des lignes de données de longueur fixe. Il vous permet également d'exécuter des requêtes SELECT * sur la table de données principale sans transmettre de grandes quantités de valeurs BLOB ou TEXT sur le réseau.

Nombres à virgule flottante et nombres à virgule fixe

Afin d'attirer l'attention de tous, regardons un exemple avant d'introduire les nombres à virgule flottante et les nombres à virgule fixe :

mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+-----------+-----------+
| c1        | c2        |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)

De dans l'exemple ci-dessus, nous voyons que la valeur de la colonne c1 est passée de 131072,32 à 131072,31. Cela est dû à l'inexactitude des nombres à virgule flottante.

Dans MySQL, float et double (ou réel) sont des nombres à virgule flottante, et décimal (ou numérique) est un nombre à virgule fixe.

L'avantage des nombres à virgule flottante par rapport aux nombres à virgule fixe est que les nombres à virgule flottante peuvent représenter une plage de données plus large lorsque la longueur est constante ; leur inconvénient est qu'ils peuvent entraîner des problèmes de précision. Dans les futures applications des nombres à virgule flottante et à virgule fixe, tout le monde doit se rappeler les points suivants :

  1. Les nombres à virgule flottante ont des problèmes d'erreur
  2. Devise, etc. sont sensibles à la précision Les données doivent être représentées ou stockées avec des nombres à virgule fixe
  3. En programmation, si des nombres à virgule flottante sont utilisés, une attention particulière doit être accordée aux problèmes d'erreur et essayer d'éviter les comparaisons à virgule flottante. ;
  4. Soyez prudent avec les nombres à virgule flottante. Gestion de certaines valeurs spéciales.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn