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.
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) 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. 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 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 Liste de chaque type de données et longueur d'octet : 定长字符串。 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é 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 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. 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 : 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 : 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. Afin d'attirer l'attention de tous, regardons un exemple avant d'introduire les nombres à virgule flottante et les nombres à virgule fixe : 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 : 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!MySQL数据类型 含义 char(n) 固定长度,最多255个字符 varchar(n) 固定长度,最多65535个字符 tinytext 可变长度,最多255个字符 text 可变长度,最多65535个字符 mediumtext 可变长度,最多2的24次方-1个字符 longtext 可变长度,最多2的32次方-1个字符
varchar et texte :
MySQL数据类型
含义
date
日期 '2008-12-2'
time
时间 '12:25:36'
datetime
日期时间 '2008-12-2 22:06:44'
timestamp
自动存储记录修改时间
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
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
Chaîne de longueur fixe.
数据类型
字节长度
范围或用法
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
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 tr >
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
TinyBlob
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 Jusqu'à 65 535 valeurs d'énumération différentes
Définir
Jusqu'à 8 Jusqu'à 64 valeurs différentes
Géométrie
Point
LigneString
Polygone
MultiPoint
td>
MultiLineString
MultiPolygon
td>
GeometryCollection
3. Suggestions d'utilisation
Principes de base pour la sélection des types de données
char et varchar
值
CHAR(4)
存储需求
VARCHAR(4)
存储需求
''
' '
4个字节
''
1个字节
'ab'
'ab '
4个字节
'ab '
3个字节
'abcd'
'abcd'
4个字节
'abcd'
5个字节
'abcdefgh'
'abcd'
4个字节
'abcd'
5个字节
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab + | ab+ |
+----------------+----------------+
1 row in set (0.00 sec)
texte et blob
②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
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)