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 ?

青灯夜游
Libérer: 2020-09-27 17:00:48
original
72470 Les gens l'ont consulté

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) m<65 est le nombre total, d<30 et d

4. Chaîne (char, varchar, _text)

MySQL数据类型含义
char(n)固定长度,最多255个字符
varchar(n)固定长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符

char et varchar :

1.char(n) Si le nombre de caractères stockés est inférieur à n, des espaces seront ajoutés après eux et les espaces seront supprimés lors de la requête. Par conséquent, il ne peut pas y avoir d'espaces à la fin des chaînes stockées dans le type char, et varchar n'est pas limité à cela.

2.char(n) de longueur fixe, char(4) occupera 4 octets quel que soit le nombre de caractères stockés, varchar est le nombre réel de caractères stockés + 1 octet (n< ;=255) ou 2 bytes (n>255),

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 (n<=255) ou 2 octets (n> 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 :

tr >TinyBlobJusqu'à 65 535 valeurs d'énumération différentesJusqu'à 64 valeurs différentes
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 D<=24, c'est le FLOAT par défaut. Si D>24, 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是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为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 变长字符串,要求M<=255
Binary(M) M 类似Char的二进制存储,特点是插入定长不足补0
VarBinary(M) M 类似VarChar的变长二进制存储,特点是定长不补0
Tiny Text Max:255 大小写不敏感
Text Max:64K 大小写不敏感
Medium Text Max:16M 大小写不敏感
Long Text Max:4G 大小写不敏感
TinyBlob Max:255 大小写敏感
Blob Max:64K 大小写敏感
MediumBlob Max:16M 大小写敏感
LongBlob Max:4G 大小写敏感
Enum 1或2 最大可达65535个不同的枚举值
Set 可达8 最大可达64个不同的值
Geometry    
Point    
LineString    
Polygon    
MultiPoint    
MultiLineString    
MultiPolygon    
GeometryCollection    
Chaîne de longueur fixe.
VarChar(M) M Chaîne de longueur variable, nécessite M<=255
Binary(M) M Stockage binaire similaire à Char, caractérisé par l'insertion d'espaces de longueur fixe et un remplissage 0
VarBinary(M) M Stockage binaire de longueur variable similaire à VarChar, caractérisé par une longueur fixe sans remplissage 0
Petit texte Max : 255 Insensible à la casse
Texte Max :64 Ko Insensible à la casse
Texte moyen Max : 16 Mo Insensible à la casse
Texte long Max : 4G Insensible à la casse
Max : 255 Sensible à la casse
Blob Max : 64 Ko td> Sensible à la casse
MediumBlob Max : 16 Mo Sensible à la casse
LongBlob Max : 4G Sensible à la casse
Enum 1 ou 2
Définir Jusqu'à 8
Géométrie
Point
LigneString
Polygone
MultiPoint td>
MultiLineString
MultiPolygon td>
GeometryCollection

3. Suggestions d'utilisation

1. Lors de la spécification du type de données, le principe de petitesse est généralement adopté. Par exemple, si vous pouvez utiliser TINY INT, il est préférable de ne pas utiliser INT, et si vous pouvez utiliser TINY INT, il est préférable de ne pas utiliser INT. peut utiliser le type FLOAT, il est préférable de ne pas utiliser le type DOUBLE, cela améliorera donc considérablement l'efficacité opérationnelle de MYSQL, en particulier dans des conditions de test de grands volumes de données.

2. Il n'est pas nécessaire de concevoir le tableau de données de manière trop complexe. La distinction entre les modules fonctionnels peut être plus pratique pour une maintenance ultérieure. Soyez prudent avec les tableaux de données méli-mélo

3. La dénomination des champs est aussi une compétence

4. Avant de concevoir la structure de la table de données, imaginez qu'il s'agit de votre pièce. Peut-être que le résultat sera plus raisonnable et efficace

5. la base de données doit être C'est un compromis entre efficacité et évolutivité, et il est inapproprié de privilégier l'un ou l'autre côté

Principes de base pour la sélection des types de données

Prémisse : utiliser un moteur de stockage approprié.

Principe de sélection : Déterminez comment choisir le type de données approprié en fonction du moteur de stockage sélectionné.

Les méthodes de sélection suivantes sont classées par moteur de stockage :

  • Moteur de stockage de données MyISAM et colonnes de données : table de données MyISAM, il est préférable d'utiliser des colonnes de données de longueur fixe (CHAR). au lieu d'une colonne de données variable de longueur (VARCHAR).
  • Moteur de stockage MEMORY et colonnes de données : les tables de données MEMORY utilisent actuellement le stockage de lignes de données de longueur fixe, donc peu importe que vous utilisiez des colonnes CHAR ou VARCHAR. Les deux sont traités comme des types CHAR.
  • Moteur de stockage InnoDB et colonnes de données : Il est recommandé d'utiliser le type VARCHAR.

Pour les tables de données InnoDB, le format de stockage de lignes interne ne fait pas de distinction entre les colonnes de longueur fixe et de longueur variable (toutes les lignes de données utilisent des pointeurs d'en-tête pointant vers les valeurs des colonnes de données), donc dans essence , l'utilisation de colonnes CHAR de longueur fixe n'est pas nécessairement plus simple que l'utilisation de colonnes VARCHAR de longueur variable. Par conséquent, le principal facteur de performances est la quantité totale de stockage utilisée par les lignes de données. Étant donné que CHAR occupe en moyenne plus d'espace que VARCHAR, il est préférable d'utiliser VARCHAR pour minimiser le stockage total et les E/S disque des lignes de données qui doivent être traitées.

Parlons des colonnes de données de longueur fixe et des colonnes de données de longueur variable.

char et varchar

Les types CHAR et VARCHAR sont similaires, mais ils sont enregistrés et récupérés différemment. Ils diffèrent également en termes de longueur maximale et de préservation des espaces de fin. Aucune conversion de cas n'est effectuée pendant le stockage ou la récupération.

Le tableau suivant montre les résultats de l'enregistrement de diverses valeurs de chaîne dans les colonnes CHAR(4) et VARCHAR(4), illustrant la différence entre CHAR et VARCHAR :

CHAR(4) 存储需求 VARCHAR(4) 存储需求
'' '    ' 4个字节 '' 1个字节
'ab' 'ab  ' 4个字节 'ab ' 3个字节
'abcd' 'abcd' 4个字节 'abcd' 5个字节
'abcdefgh' 'abcd' 4个字节 'abcd' 5个字节

Veuillez noter que la valeur de la dernière ligne du tableau ci-dessus ne s'applique que lorsque le mode strict n'est pas utilisé si MySQL s'exécute en mode strict, les valeurs qui dépassent la longueur de la colonne  ; ne sera pas enregistré et une erreur se produira.

Les valeurs récupérées des colonnes CHAR(4) et VARCHAR(4) ne sont pas toujours les mêmes car les espaces de fin sont supprimés de la colonne CHAR lors de la récupération. Les exemples suivants illustrent cette différence :

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
 
mysql> INSERT INTO vc VALUES (&#39;ab  &#39;, &#39;ab  &#39;);
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT CONCAT(v, &#39;+&#39;), CONCAT(c, &#39;+&#39;) FROM vc;
+----------------+----------------+
| CONCAT(v, &#39;+&#39;) | CONCAT(c, &#39;+&#39;) |
+----------------+----------------+
| ab  +          | ab+            |
+----------------+----------------+
1 row in set (0.00 sec)
Copier après la connexion

texte et blob

Lorsque vous utilisez des types de champs texte et blob, veuillez prêter attention aux points suivants afin de mieux utiliser les performances de la base de données.

①Les valeurs BLOB et TEXT ​​peuvent également causer leurs propres problèmes, en particulier lorsqu'un grand nombre d'opérations de suppression ou de mise à jour sont effectuées. La suppression de ce type de valeur laissera un grand « trou » dans la table de données. Les enregistrements qui combleront ces « trous » à l'avenir pourront avoir des longueurs différentes. Afin d'améliorer les performances, il est recommandé d'utiliser régulièrement la fonction OPTIMIZE TABLE pour défragmenter. de tels tableaux.

②Utilisez des index synthétiques. Les colonnes d'index synthétiques sont parfois utiles. Une solution consiste à créer une valeur de hachage basée sur le contenu d'autres colonnes et à stocker cette valeur dans une colonne de données distincte. Vous pouvez ensuite retrouver la ligne de données en récupérant la valeur de hachage. Cependant, il convient de noter que cette technique ne peut être utilisée que pour les requêtes de correspondance exacte (les valeurs de hachage ne sont pas utiles pour les opérateurs de recherche par plage comme < ou >=). 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)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal