Table des matières
MySQL supporte un grand nombre de types de colonnes, qui peuvent être rassemblées en trois catégories : les types numériques, temporels et chaînes. Cette section vous donne un aper¸u des types disponibles, et résume les besoin de stockage de chaque colonne, puis fournit une description détaillée des propriétés de chaque type de données. Cette présentation est volontairement courte. Les descriptions détaillées peuvent être consultées pour plus d'informations sur chaque type, comme les formats autorisés.
MySQL 4.1 et plus récente supporte des extensions pour gérer les données géographiques. Des informations sur ces types sont disponibles dans la section Chapitre 18, Données spatiales avec MySQL.
Plusieurs définitions de colonnes partagent la même convention :
Indique la taille maximale d'affichage. La taille maximale légale est de 255.
        S'applique aux types à virgule flottante, et indique le nombre
        de chiffres qui suivent la virgule décimale. Le nombre maximal
        est de 30, mais ne devrait pas dépasser M-2.
      
        Les crochets (‘[’ et
        ‘]’) indiquent des
        spécifications qui sont optionnelles.
      
Un résumé des colonnes numériques suit. Pour plus de détails sur les types numériques, voyez la section Section 11.2, « Types numériques ». La taille des colonnes sont dans la section Section 11.5, « Capacités des colonnes ».
        Si vous spécifiez l'option ZEROFILL pour une
        valeur numérique, MySQL va automatiquement ajouter l'attribut
        UNSIGNED à la colonne.
      
        Attention : soyez conscient
        que lorsque vous utilisez la soustraction entre deux entier,
        dont l'un est de type UNSIGNED, le résultat
        sera sans signe! See Section 12.7, « Fonctions de transtypage ».
      
            
            TINYINT[(M)] [UNSIGNED] [ZEROFILL]
          
            Un très petit entier. L'intervalle de validité pour les
            entiers signés est de -128 à
            127. L'intervalle de validité pour les
            entiers non-signés est 0 à
            255.
          
            Ce sont des synonymes de TINYINT(1). Le
            synonyme BOOLEAN a été ajouté en
            version 4.1.0
          
Un type booléen complet, qui sera introduit pour être en accord avec la norme SQL-99.
            
            SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
          
            Un petit entier. L'intervalle de validité pour les entiers
            signés est de -32768 à
            32767. L'intervalle de validité pour les
            entiers non-signés est 0 à
            65535.
          
            
            MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
          
            Un entier. L'intervalle de validité pour les entiers
            signés est de -8388608 à
            8388607. L'intervalle de validité pour
            les entiers non-signés est 0 à
            16777215.
          
            
            INT[(M)] [UNSIGNED] [ZEROFILL]
          
            Un grand entier. L'intervalle de validité pour les entiers
            signés est de -2147483648 à
            2147483647. L'intervalle de validité
            pour les entiers non-signés est 0 à
            4294967295.
          
            
            INTEGER[(M)] [UNSIGNED] [ZEROFILL]
          
            Ceci est un synonyme INT.
          
            
            BIGINT[(M)] [UNSIGNED] [ZEROFILL]
          
            Un très grand entier. L'intervalle de validité pour les
            entiers signés est de
            -9223372036854775808 à
            9223372036854775807. L'intervalle de
            validité pour les entiers non-signés est
            0 à
            18446744073709551615.
          
            Quelques conseils à suivre avec les colonnes de type
            BIGINT :
          
                
                Tous les calculs arithmétiques sont fait en utilisant
                des BIGINT signés ou des valeurs
                DOUBLE. Il est donc recommandé de ne
                pas utiliser de grands entiers non-signés dont la
                taille dépasse 9223372036854775807
                (63 bits), hormis avec les fonctions sur les bits! Si
                vous faîtes cela, les derniers chiffres du résultats
                risquent d'être faux, à cause des erreurs d'arrondis
                lors de la conversion de BIGINT en
                DOUBLE.
              
                MySQL 4.0 peut gérer des BIGINT dans
                les cas suivants :
              
                    Utiliser des entiers pour stocker des grandes
                    valeurs entières non signées, dans une colonne de
                    type BIGINT.
                  
                    Avec MIN(big_int_column) et
                    MAX(big_int_column).
                  
                    Avec les opérateurs (+,
                    -, *, etc.)
                    où tous les opérandes sont des entiers.
                  
                Vous pouvez toujours stocker une valeur entière exacte
                BIGINT dans une colonne de type
                chaîne. Dans ce cas, MySQL fera des conversions chaîne
                / nombre, qui n'utilisera pas de représentation
                intermédiaire en nombre réels.
              
                ‘-’,
                ‘+’ et
                ‘*’ utiliseront
                l'arithmétique entière des BIGINT
                lorsque les deux arguments sont des entiers. Cela
                signifie que si vous multipliez deux entiers (ou des
                résultats de fonctions qui retournent des entiers),
                vous pourriez rencontrer des résultats inattendus
                lorsque le résultat est plus grand que
                9223372036854775807.
              
            
            
            
            FLOAT(precision) [UNSIGNED] [ZEROFILL]
          
            Un nombre à virgule flottante. precision
            peut valoir <=24 pour une précision
            simple, et entre 25 et 53 pour une précision double. Ces
            types sont identiques aux types FLOAT et
            DOUBLE, décrit ci-dessous.
            FLOAT(X) a le même intervalle de
            validité que FLOAT et
            DOUBLE, mais la taille d'affichage et le
            nombre de décimales est indéfini.
          
            En MySQL version 3.23, c'est un véritable nombre à virgule
            flottante. Dans les versions antérieures,
            FLOAT(precision) avait toujours 2
            décimales.
          
            Notez qu'utiliser FLOAT peut vous donner
            des résultats inattendus, car tous les calculs de MySQL
            sont fait en double précision. See
            Section A.5.7, « Résoudre les problèmes des lignes non retournées ».
          
Cette syntaxe est fournie pour assurer la compatibilité avec ODBC.
            Utiliser des FLOAT peut vous donner des
            résultats inattendus, car les calculs sont fait en
            précision double. See Section A.5.7, « Résoudre les problèmes des lignes non retournées ».
          
            
            
            FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
          
            Un petit nombre à virgule flottante, en précision simple.
            Les valeurs possibles vont de
            -3.402823466E+38 à
            -1.175494351E-38, 0,
            et 1.175494351E-38 à
            3.402823466E+38. Si
            UNSIGNED est spécifié, les valeurs
            négatives sont interdites. L'attribut M
            indique la taille de l'affichage, et D
            est le nombre de décimales. FLOAT sans
            argument et FLOAT(X) (où
            X est dans l'intervalle 0 à 24)
            représente les nombres à virgule flottante en précision
            simple.
          
            
            
            DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
          
            Un nombre à virgule flottante, en précision double. Les
            valeurs possibles vont de
            -1.7976931348623157E+308 à
            -2.2250738585072014E-308,
            0, et
            2.2250738585072014E-308 à
            1.7976931348623157E+308. Si
            UNSIGNED est spécifié, les valeurs
            négatives sont interdites. L'attribut M
            indique la taille de l'affichage, et D
            est le nombre de décimales. DOUBLE sans
            argument et FLOAT(X) (où
            X est dans l'intervale 25 to 53)
            représente les nombres à virgule flottante en précision
            double.
          
            
            
            DOUBLE PRECISION[(M,D)] [UNSIGNED]
            [ZEROFILL], REAL[(M,D)] [UNSIGNED]
            [ZEROFILL]
          
            Ce sont des synonymes pour DOUBLE.
          
            Exception : si le serveur SQL utilise l'option
            REAL_AS_FLOAT, REAL
            est alors un synonyme de FLOAT plutôt
            que DOUBLE.
          
            
            DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
          
            Un nombre à virgule flottante littéral. Il se comporte
            comme une colonne de type CHAR:
            ``littéral'' (``unpacked'') signifie que
            le nombre est stocké sous forme de chaîne : chaque
            caractère représente un chiffre. La virgule décimale et
            le signe moins ‘-’ des
            nombres négatifs ne sont pas comptés dans
            M (mais de l'espace leur est réservé).
            Si D vaut 0, les valeurs n'auront pas de
            virgule décimale ou de partie décimale. L'intervale de
            validité du type DECIMAL est le même
            que DOUBLE, mais le vrai intervalle de
            validité de DECIMAL peut être restreint
            par le choix de la valeur de M et
            D. Si UNSIGNED est
            spécifié, les valeurs négatives sont interdites.
          
            Si D est omis, la valeur par défaut est
            0. Si M est omis, la valeur par défaut
            est 10.
          
            Avant MySQL Version 3.23, l'argument M
            devait inclure l'espace nécessaire pour la virgule et le
            signe moins.
          
            
            
            
            DEC[(M[,D])] [UNSIGNED] [ZEROFILL],
            NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL],
            FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
          
            Ce sont des synonymes pour DECIMAL.
          
            L'alias FIXED a été ajouté en version
            4.1.0 pour assurer la compatibilité avec les autres
            serveurs.
          
Une description succincte des types de données temporel suit. Pour plus d'informations, voyez la section Section 11.3, « Les types date et heure ». La taille de stockage des valeurs est présenté dans la section Section 11.5, « Capacités des colonnes ».
            Une date. L'intervalle supporté va de
            '1000-01-01' à
            '9999-12-31'. MySQL affiche les valeurs
            de type DATE au format
            'YYYY-MM-DD', mais vous permet d'assigner
            des valeurs DATE en utilisant plusieurs
            formats de chaînes et nombres.
          
            Une combinaison de date et heure. L'intervalle de validité
            va de '1000-01-01 00:00:00' à
            '9999-12-31 23:59:59'. MySQL affiche les
            valeurs de type DATE au format
            'YYYY-MM-DD HH:MM:SS', mais vous permet
            d'assigner des valeurs DATE en utilisant
            plusieurs formats de chaînes et nombres.
          
            Un timestamp. L'intervalle de validité va de
            '1970-01-01 00:00:00' à quelque part
            durant l'année 2037.
          
            En MySQL 4.0 et plus récent, les valeurs
            TIMESTAMP sont affichées au format
            YYYYMMDDHHMMSS,
            YYMMDDHHMMSS, YYYYMMDD
            ou YYMMDD, suivant que la valeur de
            M est 14 (ou absente),
            12, 8 ou
            6, respectivement, mais vous permet
            d'assigner des valeurs aux colonnes
            TIMESTAMP en utilisant des nombres ou des
            chaînes.
          
            Depuis MySQL 4.1, TIMESTAMP est
            retournée comme une chaîne, au format 'YYYY-MM-DD
            HH:MM:SS'. Si vous voulez que MySQL vous retourne
            un nombre, ajoutez +0 à la colonne. Les différentes
            tailles de timestamp ne sont pas supportées. Depuis la
            version 4.0.12, l'option --new peut être
            utilisée pour que le serveur adopte le comportement de la
            version 4.1.
          
            Une colonne TIMESTAMP est utile pour
            enregistrer les dates et heures des opérations
            INSERT et UPDATE, car
            elle prend automatiquement date actuellement si vous ne lui
            assignez pas de valeur par vous-même. Vous pouvez aussi lui
            donner la valeur courante en lui donnant la valeur
            NULL.
          
            L'argument M affecte l'affichage des
            colonnes de type TIMESTAMP. ses valeurs
            sont toujours stockées sur 4 octets.
          
            Notez que les colonnes TIMESTAMP(M) où
            M vaut 8 ou 14 sont indiquée comme
            étant des nombres, alors que les colonnes
            TIMESTAMP(M) sont indiquées comme étant
            des chaînes. Cela est fait pour s'assurer que l'ont peut
            enregistrer et lire correctement les tables ayant ce type.
          
            Une heure. L'intervalle va de
            '-838:59:59' à
            '838:59:59'. MySQL affiche les valeurs
            TIME au format
            'HH:MM:SS', mais vous permet d'assigner
            des valeurs TIME en utilisant des nombres
            ou des chaînes.
          
            Une année, au format 2 ou 4 chiffres (par défaut, c'est 4
            chiffres). Les valeurs possibles vont de
            1901 à 2155 plus
            0000 pour le format à 4 chiffres, et de
            1970 à 2069 si vous
            utilisez le format à 2 chiffres. MySQL affiche les valeurs
            YEAR au format YYYY
            mais vous permet d'assigner des valeurs en utilisant des
            nombres ou des chaînes. Le type YEAR
            n'est pas disponible avant la version 3.22.
          
Voici une présentation sommaire des types chaînes de caractères. Pour plus d'informations, voyez Section 11.4, « Les types chaînes ». Le tailles de stockage des lignes sont donnés dans Section 11.5, « Capacités des colonnes ».
        Dans certains cas, MySQL change le type d'une colonne en un
        autre, lors de l'utilisation des commandes CREATE
        TABLE et ALTER TABLE. See
        Section 13.2.5.1, « Modification automatique du type de colonnes ».
      
        Une modification qui affecte de nombreux types de colonnes est
        que depuis MySQL version 4.1.1, les définitions de colonnes
        peuvent inclure l'attribut CHARACTER SET pour
        spécifier le jeu de caractères, et, éventuellement, la
        collation de la colonne. Cela s'applique à
        CHAR, VARCHAR, les types
        TEXT types, ENUM et
        SET. Par exemple :
      
CREATE TABLE t
(
    c1 CHAR(20) CHARACTER SET utf8,
    c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin
);
        Cette définition de table crée une colonne appelée
        c1 dont le jeu de caractères est
        utf8 avec la collation par défaut de ce jeu
        de caractères, et une colonne appelée c2
        qui a le jeu de caractères latin1 et la
        collation binaire du jeu de caractères. La collation binaire
        n'est pas sensible à la casse.
      
        Le tri et les comparaisons de colonnes sont basés sur le jeu de
        caractères de la colonne. Avant MySQL 4.1, les tris et
        comparaisons étaient fait avec la collation du jeu de
        caractères du serveur. Pour les colonnes
        CHAR et VARCHAR, vous
        pouvez déclarer la colonne avec l'attribut
        BINARY pour que le tri et la recherche soient
        insensibles à la casse, utilisant le jeu de caractère
        sous-jacent, plutôt qu'un ordre lexical.
      
Pour plus de détails, voyez Chapitre 10, Jeux de caractères et Unicode.
De plus, depuis la version 4.1, MySQL interprète les spécifications de taille d'une colonne en terme de nombre de caractères. Les versions précédentes interprétaient les tailles en nombre d'octets.
            
            
            
            
            [NATIONAL] CHAR(M) [BINARY | ASCII |
            UNICODE]
          
            Une chaîne de caractère de taille fixe, toujours
            complété à droite par des espaces pour remplir l'espace
            de stockage. L'intervalle de M va de 0 à
            255 (1 à 255 pour les versions antérieure à la version
            3.23). Les espaces terminaux sont supprimés lorsque la
            valeur est relue. Les valeurs CHAR sont
            triées et comparées sans tenir compte de la casse, en
            utilisant le jeu de caractères par défaut, à moins que le
            mot clé BINARY ne soit utilisé.
          
Note : les espaces terminaux sont supprimées lorsque la valeur est stockée.
            Depuis la version 4.1.0, si la valeur M
            est supérieure à 255, Une colonne de type
            TEXT est créée. Ceci est une
            fonctionnalité de compatibilité.
          
            NATIONAL CHAR (sous son équivalent
            raccourciNCHAR) est le nom SQL-99 pour
            définir une colonne de type CHAR qui
            utilise le jeu de caractère par défaut. C'est le
            comportement par défaut de MySQL.
          
            CHAR est un raccourci pour
            CHARACTER.
          
            Depuis la version 4.1.0, l'attribut ASCII
            peut être spécifiée avec, pour assigner le jeu de
            caractère latin1 à une colonne de type
            CHAR.
          
            Depuis la version 4.1.1, l'attribut
            UNICODE peut être spécifié pour
            assigner le jeu de caractères ucs2 à
            une colonne CHAR.
          
            MySQL permet la création d'une colonne de type
            CHAR(0). Ceci est principalement utile
            dans de vieille application, qui ont besoin de la colonne,
            mais n'ont pas besoin de la valeur. C'est aussi pratique
            pour avoir une colonne à deux valeurs : un
            CHAR(0), qui n'est pas défini comme
            NOT NULL, va occuper un bit, et prendre
            deux valeurs : NULL ou
            "".
          
            CHAR
          
            Ceci est un synonyme de CHAR(1).
          
            
            
            
            
            [NATIONAL] VARCHAR(M) [BINARY]
          
            Une chaîne de taille dynamique. M
            représente la taille maximale de la valeur dans une
            colonne. L'intervalle de M va de 0 à 255
            caractères (1 à 255 avant MySQL 4.0.2).
          
Note : les espaces terminaux sont supprimées lorsque la valeur est stockée (cela diffère des spécifications de SQL-99).
            Depuis la version 4.1.0, si la valeur M
            est supérieure à 255, Une colonne de type
            TEXT est créée. Ceci est une
            fonctionnalité de compatibilité. Par exemple une colonne
            VARCHAR(500) est convertie en
            TEXT, et
            VARCHAR(200000) est convertie en
            MEDIUMTEXT. Attention, cette conversion
            affecte la suppression des espaces finaux...
          
            VARCHAR est un raccourci pour
            CHARACTER VARYING.
          
            Une colonne TINYBLOB ou
            TINYTEXT peut contenir au maximum 255
            (2^8 − 1) caractères.
          
            Une colonne TEXT ou
            BLOB peut contenir au maximum 65535 (2^16
            − 1) caractères.
          
            Une colonne MEDIUMTEXT ou
            MEDIUMBLOB peut contenir au maximum
            16777215 (2^24 − 1) caractères.
          
            Une colonne LONGTEXT ou
            LONGBLOB peut contenir au maximum
            4294967295 ou 4 Go (2^32 − 1) caractères. Jusqu'en
            version 3.23 le protocole client/serveur et les tables
            MyISAM avait une limite de 16 Mo par paquet de communication
            pour une ligne de table. Depuis les versions 4.x, la taille
            maximale d'un LONGTEXT ou
            LONGBLOB dépend de la taille maximal de
            paquet de communication pour le protocole de communication,
            et de la mémoire disponible.
          
            Une énumération. Un objet chaîne qui peut prendre une
            valeur, choisie parmi une liste de valeurs
            'valeur1', 'valeur2',
            ..., NULL ou la valeur
            spéciale d'erreur "". Une valeur
            ENUM peut avoir un maximum de 65535
            valeurs distinctes.
          
            Un ensemble. Un objet chaîne, qui peut prendre zéro, une
            ou plusieurs valeurs, choisies parmi une liste de valeurs
            'valeur1', 'valeur2',
            ... Une valeur SET
            peut avoir un maximum de 64 membres.
          
      MySQL supporte tous les types numériques de la norme ANSI/ISO
      SQL92. Ceux-ci représentent les types numériques exacts
      (NUMERIC, DECIMAL,
      INTEGER, et SMALLINT), ainsi
      que les types approchés (FLOAT,
      REAL, et DOUBLE PRECISION).
      Le mot clef INT est un synonyme de
      INTEGER, et le mot clef DEC
      est un synonyme de DECIMAL.
    
      Les types NUMERIC et DECIMAL
      sont considérés comme identiques par MySQL, comme l'autorise le
      standard SQL92. Ils sont utilisées par des valeurs dont il est
      primordial de conserver la précision exacte, comme pour des
      données financières. Lorsque vous déclarez des colonnes avec
      l'un de ces types, vous pouvez indiquer la précision et
      l'échelle comme ceci :
    
salaire DECIMAL(5,2)
      Dans cet exemple, 5
      (précision) représente le nombre de
      décimales signifiantes qui seront stockées pour les valeurs, et
      2 (échelle) représente le
      nombre de chiffres qui seront stockés après le point des
      décimales.
    
      Les valeurs de type DECIMAL et
      NUMERIC sont stockées sous forme de chaînes
      de caractères, plutôt que comme des nombres à virgule
      flottante, afin de préserver la précision décimale des valeurs.
      Un caractère est donc nécessaire pour chaque chiffre, plus la
      virgule (si scale > 0), et le signe moins
      ‘-’ (pour les nombres négatifs).
      Si scale vaut 0, les valeurs de type
      DECIMAL et NUMERIC ne
      comporteront pas de valeur décimale, ni de virgule.
    
      Les standards SQL requièrent que la colonne
      salary soit capable de stocker toute valeur de
      5 chiffres et 2 décimales. Dans ce cas, l'intervalle de valeur
      qui peut être stockée dans la colonne salary
      va de -999.99 et 999.99.
      MySQL dévie de cette spécification de deux manières :
    
          A la limite supérieure de l'intervalle, la colonne peut
          stocker les nombres jusqu'à 9999.99. Pour
          les nombres positifs, MySQL utilise l'octet réservé au signe
          pour étendre la limite supérieure.
        
          Les colonnes DECIMAL de MySQL avant 3.23
          sont stockés différemment et ne peuvent pas représenter
          toutes les valeurs requises par le standard SQL. Ceci est dû
          au fait que pour DECIMAL(M,D), la valeur de
          M inclut les octets pour le signe et le
          point décimal. L'intervalle de la colonne
          salary avant MySQL 3.23 serait de
          -9.99 à 99.99.
        
      Avec les standards SQL, la syntaxe DECIMAL(p)
      est équivalente à DECIMAL(p,0). De manière
      similaire, la syntaxe DECIMAL est équivalente
      à DECIMAL(p,0), où l'implémentation est
      autorisée à choisir la valeur de p. Depuis
      MySQL 3.23.6, ces deux variantes de DECIMAL et
      NUMERIC sont supportées. La valeur par défaut
      de M est 10. Avant la version 3.23.6,
      M et D
      devaient être spécifié explicitement.
    
      L'intervalle de validité maximal des valeurs de type
      DECIMAL et NUMERIC est le
      même que pour le type DOUBLE, mais
      l'intervalle réel peut être limité par le choix des paramètres
      précision et scale.
      Lorsqu'une valeur ayant trop de décimales est affectée à une
      colonne, la valeur est arrondie à scale
      décimales. Lorsqu'une valeur est hors des limites de validité de
      la colonne DECIMAL ou
      NUMERIC, MySQL enregistre la plus grande valeur
      qu'il peut à la place.
    
      En extension de la norme ANSI/ISO SQL92, MySQL supporte aussi les
      types entiers TINYINT,
      MEDIUMINT, et BIGINT, comme
      présenté ci-dessus. Un autre extension supportée par MySQL
      permet de spécifier optionnellement la taille d'affichage, sous
      la forme d'une valeur entière entre parenthèses, juste après le
      mot clé spécifiant le type (par exemple, INT(4)). Cette
      spécification de taille est utilisée pour remplir à gauche,
      avec le caractère de remplissage par défaut, les nombres dont la
      taille est inférieure à celle spécifiée mais uniquement à
      l'affichage : cela ne réduit pas l'intervalle de validité des
      valeurs qui peuvent être stockées dans la colonne.
    
      Lorsqu'elle est utilisée avec l'attribut de colonne optionnel
      ZEROFILL, le caractère de remplissage par
      défaut est remplacé par le caractère zéro. Par exemple, pour
      une colonne dont le type est INT(5) ZEROFILL,
      la valeur 4 sera lue 00004.
    
Notez que si vous stockez des nombres plus grands que la taille maximale d'affichage, vous pouvez rencontrer des problèmes lors de jointures de tables particulièrement compliquées, surtout si MySQL génére des tables temporaires : dans ce cas, MySQL pense que les données étaient limitées par l'affichage.
      Tous les types entiers ont un attribut optionnel (non-standard)
      UNSIGNED (non-signé, en fran¸ais). Les
      valeurs non-signées peuvent être utilisées pour n'autoriser que
      des valeurs positives dans une colonne, ou bien pour exploiter un
      intervalle de validité plus haut. Depuis la version 4.0.2 de
      MySQL, les nombres à virgule flottante peuvent aussi être
      UNSIGNED Comme avec les types entiers, cet
      attribut interdit les valeurs négatives dans la colonne, mais
      n'élève pas l'intervalle de validité.
    
      Le type FLOAT est utilisé pour représenter des données
      numériques approchées. La norme ANSI/ISO SQL92 permet la
      spécification optionnelle de la précision (mais pas de
      l'intervalle de validité) en fournissant le nombre de décimales
      voulues après la spécification de type, et entre parenthèses.
      L'implémentation de MySQL supporte aussi le paramétrage de la
      précision. Si le mot clé FLOAT est utilisé
      pour une colonne sans précision supplémentaire, MySQL utilise
      quatre octets pour stocker les valeurs. Une syntaxe alternative
      existe aussi, elle utilise deux paramètre optionnel après le mot
      clé FLOAT. Avec cette option, le premier
      nombre représente toujours la taille de stockage nécessaire pour
      la valeur, et le second nombre représente le nombre de chiffres
      à stocker et afficher, après la virgule décimale (comme pour
      les types DECIMAL et
      NUMERIC). Lorsque MySQL stocke un nombre pour
      une telle colonne, et que cette valeur a plus de décimale que
      requis, la valeur est arrondie pour éliminer les chiffres
      surnuméraires.
    
      Les types REAL et DOUBLE
      PRECISION n'acceptent pas de paramétrage de la
      précision. En extension du standard ANSI/ISO SQL92, MySQL
      reconnaît DOUBLE comme un synonyme du type
      DOUBLE PRECISION. Contrairement à la norme qui
      requiert que REAL soit plus petit que
      DOUBLE PRECISION, MySQL implémente ces deux
      types comme des nombres à virgule flottante de 8 octets, en
      double précision (lorsque le mode ``ANSI'' n'est pas activé).
      Pour une portabilité maximale, les applications réclamant le
      stockage de nombres approché doivent utiliser les types
      FLOAT ou DOUBLE PRECISION
      sans spécification de précision ou de nombre de décimales.
    
      Lorsque MySQL doit stocker une valeur qui est hors de l'intervalle
      de validité d'une colonne, il ramène la valeur à la plus proche
      possible, et stocke cette valeur. Par exemple, l'intervalle de
      validité d'une colonne d'entiers INT va de
      -2147483648 à 2147483647.
      Si vous essayez d'insérer -9999999999 dans une
      colonne de ce type, la valeur sera ramenée à la plus proche
      possible, c'est à dire -2147483648. De même,
      si vous essayez d'insérer 9999999999,
      2147483647 sera stocké à la place.
    
      Si la colonne INT possède l'attribut
      UNSIGNED, l'intervalle de validité est aussi
      large, mais les valeurs extrêmes se décalent vers
      0 et 4294967295. Si vous
      essayez de stocker -9999999999 et
      9999999999 dans cette colonne, vous obtiendrez
      respectivement 0 et
      4294967296.
    
      Les dépassements de capacité entraînant des troncatures sont
      affichés comme des alertes (``warnings'') lors
      de l'utilisation des commandes ALTER TABLE,
      LOAD DATA INFILE, UPDATE, et
      les insertions INSERT multiples.
    
| Type | Octets | De | A | 
TINYINT | 1 | -128 | 127 | 
SMALLINT | 2 | -32768 | 32767 | 
MEDIUMINT | 3 | -8388608 | 8388607 | 
INT | 4 | -2147483648 | 2147483647 | 
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 | 
      Les types dates et heures sont DATETIME,
      DATE, TIMESTAMP,
      TIME, et YEAR. Chacun d'eux
      à une échelle de valeurs légales, de même que la valeur
      ``zéro'' quand vous spécifiez une valeur illégale. A noter que
      MySQL vous permet d'enregistrer certaines dates qui ne sont pas
      strictement légales, par exemple 1999-11-31.
      La raison est que nous pensons que la vérification des dates est
      à faire niveau application. Pour accélérer les tests, MySQL
      vérifie juste que le mois est entre 0 et 12 et que le jour est
      entre 0 et 31. Les intervalles précédentes sont définies de
      cette fa¸on car MySQL vous permet d'enregistrer dans une colonne
      DATE ou DATETIME, des dates
      où le jour de la semaine ou le jour du mois est zéro. C'est
      extrêmement utile pour les applications où vous avez besoin
      d'enregistrer une date d'anniversaire pour laquelle vous n'avez
      pas la date exacte. Dans ce cas, vous enregistrez simplement la
      date comme 1999-00-00 ou
      1999-01-00. (Vous ne devez pas vous attendre à
      obtenir de valeurs correctes de fonctions tel que
      DATE_SUB() ou DATE_ADD pour
      des dates comme cela.)
    
Voici quelques considérations à garder à l'esprit quand vous manipulerez ce type de champs :
MySQL extrait les valeurs d'un champ date ou heure dans un format standard, mais essaye d'interpréter une grande variétés de format pour les valeurs que vous donnez (par exemple, quand vous essayez de comparer ou attribuer une valeur à un champ de type date ou heure). Néanmoins, seul les formats décrits dans les sections suivantes sont disponibles. Il est attendu que vous fournissiez des valeurs légales et des erreurs imprévues peuvent survenir si vous utilisez d'autre formats.
          Même si MySQL essaye d'interpreter les valeurs sous
          différents formats, il s'attend toujours à ce que l'année
          soit dans la partie gauche de la valeur. Les dates doivent
          êtres données sous la forme année-mois-jour (exemple :
          98-09-04), au lieu de mois-jour-année ou
          jour-mois-année qui sont très utilisés ailleurs (comme
          09-04-98 ou '04-09-98').
        
Les dates représentées par deux chiffres pour les années sont ambigues, car le siècle n'est pas connu. MySQL interprète les années sur deux chiffres suivant les règles suivantes :
              Si l'année est dans l'intervalle
              00-69, elle est convertie en
              2000-2069.
            
              Si l'année est dans l'intervalle
              70-99, elle est convertie en
              1970-1999.
            
MySQL convertit automatiquement une date ou heure en nombre si la valeur est utilisée dans un contexte numérique et vice versa.
          Lorsque MySQL rencontre une valeur hors d'intervalle pour un
          type date ou heure qui est donc illégale pour ce type (voir
          le début de cette section), il la convertit à la valeur
          ``zéro'' de ce type. (L'exception est que les valeurs hors
          intervalles pour les champs TIME sont
          coupées à la limite appropriée des valeurs de
          TIME.) Le tableau suivant présente le
          format de la valeur ``zéro'' de chaque type :
        
| Column type | valeur du ``zéro'' | 
DATETIME | '0000-00-00 00:00:00' | 
DATE | '0000-00-00' | 
TIMESTAMP | 00000000000000 (la longueur dépend de la taille de
                  l'affichage) | 
TIME | '00:00:00' | 
YEAR | 0000 | 
          La valeur ``zéro'' est spéciale, mais vous pouvez
          l'enregistrer ou vous y référer explicitement en utilisant
          les valeurs contenues dans le tableau ci dessus. Vous pouvez
          aussi le faire en utilisant la valeur '0'
          ou 0 qui est plus facile à manipuler.
        
          La date ou le temps ``Zéro'' utilisé avec
          MyODBC est automatiquement convertie en
          NULL à partir de la version 2.50.12 de
          MyODBC, car ODBC ne peut manipuler de
          telles valeurs.
        
        Les types DATETIME, DATE,
        et TIMESTAMP sont liés. Cette section
        décrit leurs caractéristiques, leur similarités et leurs
        différences.
      
        Le type DATETIME est prévu lorsque vous
        souhaitez stocker une date et une heure. MySQL affiche les
        valeurs de type DATETIME au format
        ‘AAAA-MM-JJ HH:MM:SS’.
        L'intervalle de validité va de ‘1000-01-01
        00:00:00’ à ‘9999-12-31
        23:59:59’. (``validité'' signifie que même si
        d'autres valeurs plus anciennes peuvent être manipulées, il
        n'est pas garantit qu'elles le seront).
      
        Le type DATE est prévu lorsque vous
        souhaitez stocker une date. MySQL affiche les valeurs de type
        DATE au format
        ‘AAAA-MM-JJ’. L'intervalle de
        validité va de '1000-01-01' à
        '9999-12-31'.
      
        La colonne TIMESTAMP a vu ses propriétés et
        comportements évoluer avec les versions de MySQL et le mode SQL
        du serveur.
      
        Vous pouvez spécifier les valeurs des colonnes
        DATETIME, DATE et
        TIMESTAMP, avec les formats communs
        suivants :
      
            Une chaîne au format 'AAAA-MM-JJ
            HH:MM:SS' ou 'AA-MM-JJ
            HH:MM:SS'. Une syntaxe plus souple est permise :
            tout caractère de ponctuation peut être utilisé comme
            délimiteur entre les parties de temps ou heure. Par
            exemple, '98-12-31 11:30:45',
            '98.12.31 11+30+45', '98/12/31
            11*30*45', et '98@12@31
            11^30^45' sont équivalents.
          
            Une chaîne au format
            ‘AAAA-MM-JJ’ ou
            ‘AA-MM-JJ’. Une syntaxe plus
            flexible est aussi acceptée ici. Par exemple,
            ‘98-12-31’,
            ‘98.12.31’,
            ‘98/12/31’, et
            ‘98@12@31’ sont équivalent.
          
            Une chaîne sans aucun délimiteurs sous la forme
            ‘AAAAMMJJHHMMSS’ ou
            ‘AAMMJJHHMMSS’, en supposant
            qu'une telle chaîne ait un sens en terme de date. Par
            exemple ‘19970523091528’ et
            ‘970523091528’ sont
            interprétés comme ‘1997-05-23
            09:15:28’, mais
            ‘971122129015’ est invalide
            (les minutes ne sont pas valides) et devient alors
            '0000-00-00 00:00:00'.
          
            Une chaîne sans aucun délimiteurs sous la forme
            ‘AAAAMMJJ’ ou
            ‘AAMMJJ’, en supposant qu'une
            telle chaîne ait un sens en terme de date. Par exemple,
            ‘19970523’ et
            ‘970523’ sont interprétés
            comme ‘1997-05-23’, mais
            ‘971332’ est invalide (les
            mois ne sont pas valides) et devient alors
            ‘0000-00-00’.
          
            Un nombre au format AAAAMMJJHHMMSS ou
            AAMMJJHHMMSS, en supposant qu'un tel
            nombre ait un sens en terme de date. Par exemple,
            19830905132800 et
            830905132800 sont interprétés comme
            ‘1983-09-05 13:28:00’.
          
            Un nombre au format AAAAMMJJ ou
            AAMMJJ en supposant qu'un tel nombre ait
            un sens en terme de date. Par exemple,
            19830905 et 830905
            sont interprétés comme
            ‘1983-09-05’.
          
            Un résultat de fonction qui retourne une valeur acceptable
            dans une colonne de type DATETIME,
            DATE, ou TIMESTAMP,
            tels que NOW() ou
            CURRENT_DATE.
          
        Les valeurs invalides DATETIME,
        DATE, ou TIMESTAMP sont
        remplacées par la date ``zéro'' du type approprié
        (respectivement ‘0000-00-00
        00:00:00’,
        ‘0000-00-00’, ou
        00000000000000).
      
        Pour la valeurs spécifiées sous forme de chaînes avec des
        délimiteurs de date, il n'est pas nécessaire de spécifier les
        deux chiffres pour les mois ou les dates qui sont inférieurs à
        10. Par exemple,
        ‘1979-6-9’ est valide et est
        équivalent à ‘1979-06-09’.
        Similairement, pour les valeurs spécifiées sous forme de
        chaîne avec des délimiteurs d'heure, il n'est pas obligatoire
        de spécifier les deux chiffres des heures, minutes et secondes
        qui sont inférieures à 10.
        ‘1979-10-30 1:2:3’ est valide et
        est équivalent à '1979-10-30 01:02:03'.
      
        Les valeurs spécifiées sous forme de nombres doivent avoir 6,
        8, 12, ou 14 chiffres de long. Si le nombre a 8 ou 14 chiffres,
        MySQL suppose que le format est AAAAMMJJ ou
        AAAAMMJJHHMMSS (respectivement) et que
        l'année est représentées par les 4 premiers chiffres. Si le
        nombre a 6 ou 12 chiffres, MySQL suppose que le format est
        AAMMJJ ou AAMMJJHHMMSS
        (respectivement) et format et que l'année est représentées
        par les 2 premiers chiffres. Les nombres qui ne sont pas d'une
        taille valide, sont complétés avec des 0 jusqu'à la taille
        lisible la plus proche.
      
        Les valeurs spécifiées sous forme de chaînes sans
        délimiteurs sont interprétés en fonction de leur taille. Si
        la chaîne à 8 ou 14 caractères de long, l'année est
        supposée avoir 4 chiffres. Sinon, l'année est supposée avoir
        2 chiffres. La chaîne est interprétée de gauche à droite, en
        lisant successivement l'année, le mois, la date, l'heure, les
        minutes et les secondes, tant qu'il y a des valeurs dans la
        chaîne. Cela signifie que vous ne devez pas utiliser de
        chaînes qui ont moins de 6 caractères. Par exemple, si vous
        spécifiez ‘9903’, en pensant
        qu'il représente Mars 1999, vous vous apercevrez que MySQL
        insère à la place la date ``zéro'' dans votre table. Cela est
        dû au fait que si l'année et le mois sont 99 et 03, la date
        est 0, ce qui en fait une date invalide, qui est rejetée par
        MySQL.
      
Dans une certaines mesure, vous pouvez assigner des valeurs d'une colonne à une autre colonne d'un autre type. Cependant, vous devez vous attendre à quelques altération ou pertes de valeurs durant la conversion :
            Si vous assignez une valeur DATE à une
            colonne de type DATETIME ou
            TIMESTAMP, la partie représentant les
            heures vaudra ‘00:00:00’, car
            les colonnes de type DATE ne contiennent
            pas d'information d'heure.
          
            Si vous assignez une valeur DATETIME ou
            TIMESTAMP à une colonne de type
            DATE, la composante heure sera perdue,
            car les colonnes de type DATE ne
            contiennent pas d'information d'heure.
          
            N'oubliez pas que même si les valeurs
            DATETIME, DATE, et
            TIMESTAMP peuvent être spécifiée avec
            différents formats, ces types n'ont pas les mêmes
            intervalle de validité. Par exemple, les valeurs de type
            TIMESTAMP ne peuvent pas prendre de
            valeur antérieure à 1970 ou postérieure à 2037. Cela
            signifie qu'une date telle que
            ‘1968-01-01’, est légale
            dans les colonnes de type DATETIME, mais
            n'est pas valide pour les TIMESTAMP, et
            sera convertie en date zéro (0) si elle
            est assignée à une telle colonne.
          
Attention à certains pièges concernant les spécifications de dates :
            La syntaxe à délimiteur libre peut être une source de
            problème. Par exemple, une valeur telle que
            ‘10:11:12’ ressemble à une
            heure, à cause du délimiteur
            `‘:’', mais avec une colonne
            de date, elle sera interprétée comme la date
            ‘2010-11-12’. La valeur
            ‘10:45:15’ sera convertie en
            ‘0000-00-00’ car
            ‘45’ n'est pas un mois
            valide.
          
            Le serveur MySQL effectue seulement la vérification de base
            la validité d'une date : jours 00-31,
            mois 00-12, années
            1000-9999. N'importe quelle date qui
            n'est pas dans cette marge retournera
            0000-00-00. Veuillez noter que ceci vous
            permet toujours de stocker les dates inadmissibles telles
            que 2002-04-31. Il permet à des
            applications web de stocker des données d'une forme sans
            vérifier plus loin. Pour s'assurer qu'une date est valide,
            vous devrez effectuer un test dans votre application.
          
Les années spécifiée avec deux chiffres seulement sont ambiguÏs, car il manque le siècle. MySQL interprète les années à deux chiffres suivant ces règles :
                Les années de l'intervalle 00-69
                sont converties en 2000-2069.
              
                Les années de l'intervalle 70-99
                sont converties en 1970-1999.
              
          Le type TIMESTAMP est prévu pour stocker
          automatiquement l'heure courante lors d'une commande
          INSERT ou UPDATE. Si
          vous avez plusieurs colonnes de type
          TIMESTAMP, seule la première colonne sera
          mise à jour automatiquement.
        
          La modification automatique de la première colonne de type
          TIMESTAMP survient si l'une des conditions
          suivantes est remplie :
        
              Vous insérez explicitement la valeur
              NULL dans la colonne.
            
              La colonne n'est pas spécifiée explicitement dans la
              commande INSERT ou LOAD DATA
              INFILE.
            
              La colonne n'est pas spécifiée explicitement dans la
              commande UPDATE et d'autres colonnes
              changent de valeurs (Notez qu'une commande
              UPDATE qui affecte une valeur qui est
              déjà celle de la colonne sera ignorée, et la colonne
              TIMESTAMP ne sera pas modifiée, car la
              ligne n'est pas à proprement parlée modifiée. MySQL
              ignore alors ces modifications pour des raisons
              d'efficacité).
            
          Les autres colonnes de type TIMESTAMP,
          hormis la première, peuvent aussi prendre la valeur courante.
          Affectez-lui alors la valeur NULL ou la
          fonction NOW().
        
          Vous pouvez affecter à n'importe quelle colonne de type
          TIMESTAMP une valeur différente de l'heure
          et la date courant en fournissant une valeur explicite. Cela
          s'applique aussi à la première colonne de type
          TIMESTAMP. Par exemple, si vous voulez
          affecter la date de création d'une ligne à une colonne de
          type TIMESTAMP, mais ne plus y toucher
          ultérieurement :
        
Laissez MySQL donner la valeur de la colonne lors de la création de la ligne. Cela va initialiser la colonne à la date et heure courante.
              Lorsque vous faites des modifications ultérieures,
              affectez explicitement à la colonne
              TIMESTAMP sa propre valeur.
            
UPDATE tbl_name
    SET timestamp_col = timestamp_col,
        other_col1 = new_value1,
        other_col2 = new_value2, ...
          D'un autre coté, vous pouvez aussi facilement initialiser la
          colonne TIMESTAMP avec
          NOW() lors de sa création, puis ne plus la
          modifier ultérieurement.
        
          L'intervalle de validité des valeurs
          TIMESTAMP va du début de l'année 1970
          jusque quelque part durant l'année 2037, avec une précision
          d'une seconde. Les valeurs sont affichés comme des nombres
          entiers.
        
          Le format d'affichage des valeurs TIMESTAMP
          dépend de la taille d'affichage, comme illustré ci-dessous.
          Le format total TIMESTAMP a 14 chiffres,
          mais les colonnes TIMESTAMP peuvent être
          créées avec des formats plus courts :
        
| Type de colonne | Format d'affichage | 
TIMESTAMP(14) | YYYYMMDDHHMMSS | 
TIMESTAMP(12) | YYMMDDHHMMSS | 
TIMESTAMP(10) | YYMMDDHHMM | 
TIMESTAMP(8) | YYYYMMDD | 
TIMESTAMP(6) | YYMMDD | 
TIMESTAMP(4) | YYMM | 
TIMESTAMP(2) | YY | 
          Toutes les colonnes de type TIMESTAMP ont
          la même taille de stockage, indépendamment de la taille
          d'affichage. Les formats les plus courants sont 6, 8, 12, et
          14. Vous pouvez spécifier une taille arbitraire lors de la
          création de la table, mais 0 et les valeurs supérieures à
          14 sont ramenées à 14. Les valeurs impaires sont aussi
          ramenées au nombre pair supérieur.
        
          Les colonnes TIMESTAMP stockent une date
          valide, en utilisant la totalité de l'espace de stockage,
          quelque soit la valeur de l'affichage. Cela a les implication
          suivantes :
        
              Spécifiez toujours l'année, le mois et le jour, même si
              le type de colonne est TIMESTAMP(4) ou
              TIMESTAMP(2). Sinon, la valeur ne sera
              pas légale et 0 sera stockée.
            
              Si vous utilisez la commande ALTER
              TABLE pour réduire la largeur d'une colonne
              TIMESTAMP, les informations qui
              étaient affichées sont désormais ``cachées'', mais pas
              détruites.
            
              Similairement, réduire une colonne de type
              TIMESTAMP ne cause aucune perte
              d'information, en dehors du fait que ces informations ne
              sont plus affichées.
            
              Bien que les valeurs TIMESTAMP soient
              stockées avec une précision d'une seconde, la seule
              fonction qui travaille directement avec ces valeurs est la
              fonction UNIX_TIMESTAMP(). Les autres
              fonctions opèrent sur des valeurs lues et formatées.
              Cela signifie que vous ne pouvez pas utiliser de fonctions
              telles que HOUR() ou
              SECOND() a moins que le format
              d'affichage de la valeur TIMESTAMP ne
              présente cette valeur. Par exemple, les heures ne sont
              jamais affichées dans une colonne de type
              TIMESTAMP à moins que la taille
              d'affichage de la colonne ne soit d'au moins 10.
              L'utilisation de la fonction HOUR() sur
              une valeur ayant un format d'affichage plus court que
              10 retournera un résultat
              inutilisable.
            
          Depuis MySQL 4.1.0, les propriétés des colonnes
          TIMESTAMP diffèrent des versions
          prédécentes de MySQL :
        
              Les colonnes TIMESTAMP sont affichées
              dans le même format que les valeurs des colonnes
              DATETIME.
            
              Les tailles d'affichage ne sont plus supportées comme
              décrit dans la section précédente. En d'autres termes,
              vous ne pouvez pas utiliser
              TIMESTAMP(2),
              TIMESTAMP(4), etc.
            
          De plus, si le serveur MySQL est en mode
          MAXDB, TIMESTAMP est
          identique à DATETIME. C'est à dire que si
          le serveur fonctionne en mode MAXDB au
          moment où la table est créée, toutes les colonnes
          TIMESTAMP créées sont en fait de type
          DATETIME. En conséquence, ces colonnes
          utilisent le format d'affichage DATETIME,
          ont le même intervalle de validité et aucune mise à jour
          automatique n'intervient.
        
          MySQL peut fonctionner en mode MAXDB depuis
          la version 4.1.1. Pour activer ce mode, lancez le serveur avec
          le mode MAXDB au démarrage avec l'option
          --sql-mode=MAXDB, ou en modifiant la variable
          sql_mode durant l'exécution :
        
mysql> SET GLOBAL sql_mode=MAXDB;
          Un client peut mettre le serveur en mode
          MAXDB pour sa propre connexion avec la
          commande suivante :
        
mysql> SET SESSION sql_mode=MAXDB;
        MySQL lit et affiche les colonnes de type
        TIME au format 'HH:MM:SS'
        (ou 'HHH:MM:SS' pour les grandes quantités
        d'heures). Les valeurs de TIME vont de
        '-838:59:59' à
        '838:59:59'. La raison de cet intervalle de
        validité si large est que les colonnes de type
        TIME peuvent être utilisés pour
        représenter non seulement des heures du jour, mais aussi des
        durées entre deux événements (ce qui peut dépasser largement
        les 24 heures, ou même, être négatif).
      
        Vous pouvez spécifier une valeur de type
        TIME avec différents formats :
      
            Une chaîne au format 'D
            HH:MM:SS.fraction'. (Notez que MySQL ne stockera
            pas la fraction d'une valeur TIME.)
          
            Vous pouvez aussi utiliser l'une des syntaxes alternatives
            suivantes : HH:MM:SS.fraction,
            HH:MM:SS, HH:MM,
            D HH:MM:SS, D HH:MM,
            D HH ou SS. Ici,
            D peut prendre des valeurs entre 0 et 33.
          
            Une chaîne sans délimiteur au format
            'HHMMSS', en supposant que cela puisse
            avoir un sens en terme de date. Par exemple,
            '101112' est interprété comme
            '10:11:12', mais
            '109712' est invalide (le nombre de
            minutes n'a pas de sens), et devient la date zéro :
            '00:00:00'.
          
            Un nombre au format HHMMSS, en supposant
            que cela puisse avoir un sens en terme de date. Par exemple,
            101112 est interprété comme
            '10:11:12'. Les formats alternatifs sont
            aussi compris : SS,
            MMSS, HHMMSS et
            HHMMSS.fraction. Notez que MySQL ne
            stocke pas encore les fractions de secondes.
          
            Le résultat d'une fonction qui retourne une valeur
            acceptable dans un contexte de valeurs
            TIME, comme
            CURRENT_TIME.
          
        Pour les valeurs TIME spécifiées avec des
        délimiteurs, il n'est pas nécessaire de préciser deux
        chiffres pour les valeurs inférieurs à 10
        pour les heures, minutes et secondes. '8:3:2'
        est la même chose que '08:03:02'.
      
        Soyez soigneux lors de l'utilisation de valeurs ``courtes'' à
        une colonne de type TIME. MySQL interprète
        les valeurs en supposant que les chiffres de droite
        représentent les secondes (MySQL interprète les valeurs
        TIME comme des durées et non comme des
        heures d'une journée). Par exemple, vous pouvez penser que les
        valeurs '11:12', '1112' et
        1112 représentent
        '11:12:00' (12 minutes après 11 heures),
        mais MySQL les interprétera comme '00:11:12'
        (11 minutes, 12 secondes). Similairement,
        '12' et 12 représentent
        '00:00:12'. Les valeurs de
        TIME déclarées avec des
        :, au contraire, sont toujours traités comme
        des heures de journée. '11:12' signifiera
        '11:12:00' et non pas
        00:11:12
      
        Les valeurs hors de l'intervalle de validité de
        TIME mais qui sont valides sont ramenées à
        la valeur maximale stockable la plus proche. Par exemple,
        '-850:00:00' et
        '850:00:00' sont respectivement converties en
        '-838:59:59' et
        '838:59:59'.
      
        Les valeurs TIME non valides sont
        transformées en date zéro '00:00:00'. Notez
        que comme '00:00:00' est elle-même une
        valeur TIME valide, vous n'aurez pas le moyen
        de faire la différence entre une valeur
        '00:00:00' stockée en connaissance de cause,
        et '00:00:00' stockée à cause d'une erreur.
      
        Le type YEAR est un type d'1 octet utilisé
        pour représenter les années.
      
        MySQL extrait et affiche la valeur de YEAR au
        format YYYY. L'échelle va de
        1901 à 2155.
      
        Vous pouvez spécifier la valeur de YEAR en
        plusieurs formats :
      
            Une chaîne de quatre chiffres entre
            '1901' et '2155'.
          
            Un nombre à quatre chiffres entre 1901
            et 2155.
          
            Une chaîne de deux chiffres entre '00'
            et '99'. Les valeurs entre
            '00' et '69' et entre
            '70' et '99' sont
            respectivement converties en valeurs YEAR
            comprises entre 2000 et
            2069 d'une part, et
            1970 et 1999 de
            l'autre.
          
            Une nombre de deux chiffres entre 1 et
            99. Les valeurs entre
            1 et 69 et entre
            70 et 99 sont
            respectivement converties en valeurs YEAR
            comprises entre 2001 et
            2069 d'une part, et
            1970 et 1999 d'autre
            part. Notez que le rang de valeurs pour les nombres à deux
            chiffres est totalement différent du rang pour les chaînes
            à deux chiffres parce que vous ne pouvez pas spécifier
            deux zéro directement en tant que nombre et le faire
            interpréter en tant que 2000. Vous devez
            le spécifier comme chaîne '0' ou
            '00' sinon il sera interprété comme
            0000.
          
            En tant que résultat d'une fonction retournant une valeur
            acceptable dans le contexte de YEAR,
            comme as NOW().
          
        Les valeurs illégales pour YEAR sont
        converties en 0000.
      
MySQL lui même est compatible an 2000. (see Section 1.2.5, « Compatibilité an 2000 »), mais les valeurs manipulées par MySQL peuvent ne pas l'être. N'importe quelle valeur n'ayant que deux chiffres pour représenter l'année est ambigu, car le siècle n'est pas précisé. Ces valeurs doivent être interprétées comme des valeurs à 4 chiffres, car MySQL stocke les années en interne en utilisant 4 chiffres.
        Pour les types DATETIME,
        DATE, TIMESTAMP, et
        YEAR, MySQL interprète les dates ambigus en
        se basant sur les règles suivantes :
      
            Les valeurs d'années comprises dans l'intervalle
            00-69 sont converties en
            2000-2069.
          
            Les valeurs d'années comprises dans l'intervalle
            70-99 sont converties en
            1970-1999.
          
Gardez bien à l'esprit que ces règles ne sont que la meilleure approximation possible d'une valeur. Si l'heuristique proposée par MySQL ne fournit pas les valeurs attendues, vous devrez fournir une valeur sans ambiguïté. (à 4 chiffres)
        ORDER BY ordonnera correctement les types
        YEAR/DATE/DATETIME à deux chiffres.
      
        Notez aussi que quelques fonctions comme
        MIN() et MAX()
        convertiront un TIMESTAMP/DATE en nombre.
        Cela signifie qu'un timestamp avec une année à deux chiffres
        ne donneront pas de résultats corrects avec ces fonctions. Une
        solution dans ce cas est de convertir le
        TIMESTAMP/DATE en une année à 4 chiffres ou
        d'utiliser quelque chose comme
        MIN(DATE_ADD(timestamp,INTERVAL 0 DAYS)).
      
      Les types chaînes sont CHAR,
      VARCHAR, BLOB,
      TEXT, ENUM, et
      SET. Cette section décrit comment ces types
      fonctionnent, leur besoins en espace et comment les utiliser dans
      vos requêtes.
    
        Les types CHAR et VARCHAR
        sont similaires, mais diffèrent dans la manière dont ils sont
        stockés et récupérés.
      
        La longueur d'une colonne CHAR est fixée à
        la longueur que vous avez défini lors de la création de la
        table. La longueur peut être n'importe quelle valeur entre 1 et
        255. (Dans la version 3.23 de MySQL, la longueur est comprise
        entre 0 et 255.) Quand une valeur CHAR est
        enregistrée, elle est complété à droite avec des espaces
        jusqu'à atteindre la valeur fixée. Quand une valeur de
        CHAR est lue, les espaces en trop sont
        retirés.
      
        Les valeurs contenues dans les colonnes de type
        VARCHAR sont de tailles variables. Vous
        pouvez déclarer une colonne VARCHAR pour que
        sa taille soit comprise entre 1 et 255, exactement comme pour
        les colonnes CHAR. Par contre, contrairement
        à CHAR, les valeurs de
        VARCHAR sont stockées en utilisant autant de
        caractères que nécessaire, plus un octet pour mémoriser la
        longueur. Les valeurs ne sont pas complétées. Au contraire,
        les espaces finaux sont supprimés avant stockage (ce qui ne
        fait pas partie des spécifications ANSI SQL).
      
        Si vous assignez une chaîne de caractères qui dépasse la
        capacité de la colonne CHAR ou
        VARCHAR, celle ci est tronquée jusqu'à la
        taille maximale du champ.
      
        Le tableau suivant illustre les différences entre les deux
        types de colonnes en montrant les différences entre
        l'enregistrement dans une colonne CHAR(4) ou
        VARCHAR(4) :
      
| Valeur | CHAR(4) | Espace requis | VARCHAR(4) | Espace requis | 
'' | '    ' | 4 octets | '' | 1 octet | 
'ab' | 'ab  ' | 4 octets | 'ab' | 3 octets | 
'abcd' | 'abcd' | 4 octets | 'abcd' | 5 octets | 
'abcdefgh' | 'abcd' | 4 octets | 'abcd' | 5 octets | 
        Les valeurs lues dans les colonnes de type
        CHAR(4) et VARCHAR(4)
        seront les mêmes dans tous les cas, car les espaces finaux sont
        retirés des valeurs issues de colonnes de type
        CHAR lors de la lecture.
      
        Les valeurs dans les colonnes CHAR et
        VARCHAR sont classées et comparées sans
        tenir compte de la casse, à moins que l'attribut
        BINARY n'ai été spécifié lors de la
        création de la table. L'attribut BINARY
        signifie que les valeurs sont classées et triées en tenant
        compte de la casse, suivant l'ordre des caractères ASCII de la
        machine ou est installé le serveur MySQL.
        BINARY n'affecte pas les méthodes de lecture
        et de stockage des valeurs.
      
        L'attribut BINARY se propage dans une
        expression : il suffit qu'une seule colonne, utilisée dans une
        expression, ait l'attribut BINARY pour que
        toute l'expression ne tienne plus compte de la casse.
      
        MySQL peut changer automatiquement le type d'une colonne
        CHAR ou VARCHAR lors de la
        création de la table. See
        Section 13.2.5.1, « Modification automatique du type de colonnes ».
      
        Les types BINARY et
        VARBINARY sont similaires à
        CHAR et VARCHAR, hormis le
        fait qu'ils contiennent des chaînes binaires, plutôt que des
        chaînes de texte. C'est à dire, qu'ils contiennent des
        chaînes d'octets, plutôt que des chaînes de caractères. Cela
        signifie qu'ils n'ont pas de jeu de caractères associé, et les
        tris et comparaisons sont basées sur la valeur numérique de
        l'octet.
      
        La taille maximale pour les types BINARY et
        VARBINARY, est la même que celles de
        CHAR and VARCHAR, hormis
        le fait que la taille de BINARY et
        VARBINARY est une taille en octets, et non
        pas en caractères.
      
        La gestion des espaces finaux est la même pour
        BINARY et VARBINARY que
        pour CHAR et VARCHAR.
        Lorsqu'une valeur BINARY est stockée, elle
        est complétée à droite avec des espaces. Lorsque les valeurs
        BINARY sont lues, les espaces finaux sont
        supprimés. Pour VARBINARY, les espaces
        finaux sont supprimés lorsque la valeur est stockée. Depuis
        MySQL 5.0.3, les espaces finaux sont conservés. Gardez ces
        caractéristiques en tête si vous envisagez d'utiliser ces
        types de données, et que les valeurs risques de se terminer par
        des espaces.
      
        Avant MySQL 4.1.2,
        BINARY( et
        M)VARBINARY(
        étaient traités comme des
        M)CHAR( et
        M) BINARYVARCHAR(.
        Depuis MySQL 4.1.2, M) BINARYBINARY et
        VARBINARY sont disponbiles en tant que types
        de données distincts, et pour
        CHAR( et
        M) BINARYVARCHAR(,
        l'attribut M) BINARYBINARY n'active pas le traitement
        binaire des colonnes. A la place, la collation binaire de la
        colonne sera utilisée, mais la colonne elle-même contiendra
        des caractères, plutôt que des octets. Par exemple, en version
        4.1 et plus récent, CHAR(5) BINARY est
        traité comme CHAR(5) CHARACTER SET latin1 COLLATE
        latin1_bin, en supposant que le jeu de caractères par
        défaut est latin1.
      
        Une valeur de type BLOB est un objet binaire
        de grande taille, qui peut contenir une quantité variable de
        données. Les quatre types BLOB
        (TINYBLOB, BLOB,
        MEDIUMBLOB, et LONGBLOB)
        ne différent que par la taille maximale de données qu'ils
        peuvent stocker. See Section 11.5, « Capacités des colonnes ».
      
        Les quatre types TEXT
        (TINYTEXT, TEXT,
        MEDIUMTEXT, et LONGTEXT
        correspondent aux types BLOB équivalents, et
        ont les mêmes contraintes de stockage. Les seules différences
        entre les colonnes de type BLOB et celles de
        type TEXT se situent aux niveau des tris et
        comparaisons : Les tris, faits sur les BLOB,
        contrairement à ceux faits sur les TEXT,
        tiennent compte de la casse. En d'autres termes, une valeur
        TEXT est une valeur BLOB
        insensible à la casse.
      
        Si vous assignez une valeur trop grande à une colonne de type
        BLOB ou TEXT, la valeur
        sera tronquée à la taille maximale possible.
      
        Dans la majorité des cas, vous pouvez considérer une colonne
        de type TEXT comme une colonne de type
        VARCHAR, aussi grande que vous le souhaitez.
        De même, vous pouvez considérer une colonne de type
        BLOB comme une colonne de type
        VARCHAR BINARY. Les seules différences
        sont :
      
            Vous pouvez indexer les colonnes de type
            BLOB ou TEXT à partir
            de la version 3.23.2 de MySQL. Les versions plus anciennes
            ne peuvent pas indexer ces colonnes.
          
            Pour les index des colonnes BLOB et
            TEXT, vous devez spécifier une taille
            d'index. Pour les colonnes de type CHAR
            et VARCHAR, la taille du préfixe est
            optionnelle.
          
            Il n'y a pas de suppression des espaces finaux lors du
            stockage de valeur dans des colonnes de type
            BLOB et TEXT, ce qui
            est le cas dans pour les colonnes de type
            VARCHAR.
          
            
            
            
            Les colonnes BLOB et
            TEXT ne peuvent avoir de valeur par
            défaut. (DEFAULT)
          
        MyODBC considère les valeurs
        BLOB comme des
        LONGVARBINARY et les valeurs
        TEXT comme des
        LONGVARCHAR.
      
        Vous pouvez rencontrer les problèmes suivants, à cause de la
        grande taille des colonnes de type BLOB et
        TEXT, lors de leur utilisation :
      
            Si vous voulez utiliser les commandes GROUP
            BY ou ORDER BY sur une colonne
            de type BLOB ou TEXT,
            vous devez d'abord la convertir en un objet de taille fixe.
            Le meilleur moyen est d'utiliser la fonction
            SUBSTRING. Par exemple :
          
mysql>SELECT comment FROM nom_de_table,SUBSTRING(comment,20) AS substr->ORDER BY substr;
            Si vous le ne faites pas, seuls les
            max_sort_length premiers octets de la
            colonne seront utilisés pour le tri. La valeur par défaut
            de max_sort_length est 1024. Cette valeur
            peut être modifiée en utilisant l'option
            -O au démarrage du serveur
            mysqld. Vous pouvez utiliser la commande
            GROUP BY sur une colonne de type
            BLOB ou TEXT en
            spécifiant la position de la colonne, ou avec un alias :
          
mysql>SELECT id,SUBSTRING(blob_col,1,100) FROM nom_de_table GROUP BY 2;mysql>SELECT id,SUBSTRING(blob_col,1,100) AS b FROM nom_de_table GROUP BY b;
            La taille maximale d'un objet BLOB ou
            TEXT est déterminée par son type, mais
            la valeur la plus grande que vous pouvez transmettre au
            programme client est déterminée par la quantité de
            mémoire disponible sur le serveur et par les tailles des
            buffers de communication. Vous pouvez changer la taille des
            buffers de communication, mais vous devez le faire sur le
            serveur et le client en même temps. See
            Section 7.5.2, « Réglage des paramètres du serveur ».
          
            Par exemple, mysql et
            mysqldump vous autorises tous les deux à
            modifier la valeur cliente de
            max_allowed_packet. Voyez
            Section 7.5.2, « Réglage des paramètres du serveur », Section 8.3, « mysql, l'outil en ligne de commande »
            et Section 8.8, « mysqldump, sauvegarde des structures de tables et les données ».
          
        Notez que chaque valeur BLOB ou
        TEXT est représentée en interne par un
        objet alloué séparément, contrairement à tous les autres
        types de colonne, pour lesquels la place de stockage est
        allouée une fois pour chaque colonne, lorsque la table est
        ouverte.
      
        Une énumération ENUM est une chaîne dont
        la valeur est choisie parmi une liste de valeurs autorisées
        lors de la création de la table.
      
        Cette chaîne peut aussi être la chaîne vide
        ("") ou NULL dans
        certaines circonstances :
      
            Si vous insérez une valeur illégale dans une énumération
            ENUM (c'est à dire, une chaîne qui
            n'est pas dans la liste de valeurs autorisées), la chaîne
            vide est insérée pour représenter une erreur. Cette
            chaîne peut être distinguée d'une chaîne vide 'normale'
            par le fait que cette chaîne à la valeur numérique 0.
            Nous reviendrons sur ce point plus tard.
          
            Si une colonne d'énumération est déclarée
            NULL, NULL devient
            aussi une valeur autorisée, et la valeur par défaut est
            alors NULL. Si une colonne
            d'énumération est déclarée NOT NULL,
            la valeur par défaut est le premier élément de la liste
            des valeurs autorisées.
          
Chaque élément de l'énumération dispose d'un index :
Les valeurs de la liste des valeurs autorisées sont indexées à partir de 1.
L'index de la chaîne vide (cas d'erreur) est 0. Cela signifie que vous pouvez utiliser la sélection suivante pour repérer les valeurs d'énumération invalides :
mysql> SELECT * FROM nom_de_table WHERE enum_col=0;
            L'index de la valeur NULL est
            NULL.
          
        Par exemple, une colonne créée comme ENUM("un",
        "deux", "trois") peut prendre n'importe quelle valeur
        ci-dessous. L'index de chaque valeur est aussi présenté :
      
| Valeur | Index | 
NULL | NULL | 
"" | 0 | 
"un" | 1 | 
"deux" | 2 | 
"trois" | 3 | 
Une énumération peut avoir un maximum de 65535 éléments.
        A partir de la version 3.23.51, les espaces en début et fin de
        chaîne sont automatiquement supprimés des éléments de
        l'énumération ENUM lorsque la table est
        créée.
      
La casse des lettres est sans importance lors de l'assignation de valeurs dans une énumération. Cependant, les valeurs lues dans la base auront la même casse que celle spécifiée lors de la création de la table.
        Si vous lisez le contenu d'une énumération dans un contexte
        numérique, l'index de la valeur ENUM sera
        retournée. Par exemple, vous pouvez lire des valeurs
        numériques comme ceci :
      
mysql> SELECT enum_col+0 FROM nom_de_table;
        Si vous stockez un nombre dans une colonne de type
        ENUM, le nombre sera traité comme un index,
        et la valeur stockée sera celle de l'élément ayant cet index
        (Attention, cela ne fonctionnera pas avec les commandes
        LOAD DATA, car cette dernière traite toutes
        les valeurs comme des chaînes). Il est déconseillé de stocker
        des valeurs numériques dans un ENUM car cela
        engendre des confusions. Par exemple, la colonne suivante est
        une énumération de chaînes contenant les valeurs
        '0', '1' et
        '2', mais leur valeur numérique est
        1, 2 et
        3 :
      
numbers ENUM('0','1','2')
        Les valeurs de type ENUM sont triées en
        fonction de l'ordre des éléments, fixé à la création de la
        table (en d'autres termes, les valeurs ENUM
        sont stockées en fonction de leur index). Par exemple,
        "a" précède "b" dans
        l'énumération ENUM("a", "b"), mais
        "b" précède "a" dans
        l'énumération ENUM("b", "a"). La chaîne
        vide précède toujours les chaînes non vides, et
        NULL précède toutes les valeurs.
      
        Si vous voulez connaître toutes les valeurs possibles d'une
        colonne de type ENUM, pensez à utiliser
        cette commande : SHOW COLUMNS FROM nom_de_table LIKE
        enum_column_name, puis analysez la définition de la
        colonne de type ENUM (deuxième colonne dans
        le résultat).
      
        Un SET est une chaîne qui peut avoir zéro
        ou plusieurs valeurs, chacune doit être choisie dans une liste
        de valeurs définies lors de la création de la table. Les
        valeurs des colonnes SET composées de
        plusieurs membres sont définies en séparant celles-ci avec des
        virgules (‘,’). Ce qui fait que
        la valeur d'un membre de SET ne peut contenir
        lui même de virgule.
      
        Par exemple, une colonne définie en tant que SET("un",
        "deux") NOT NULL peut avoir l'une de ces valeurs :
      
"" "un" "deux" "un,deux"
        Un SET peut avoir au plus 64 membres.
      
        A partir de la version 3.23.51, les espaces en trop sont
        automatiquement effacés des membres de SET
        lorsque la table est créée.
      
        MySQL enregistre les valeurs de SET
        numériquement. Le bit de poids faible de la valeur correspond
        alors au premier élément de la liste. Si vous utilisez une
        valeur SET dans un contexte numérique, les
        bits des éléments dans cet ensemble seront mis à un, et les
        autres à zéro. Par exemple, vous pouvez obtenir un entier à
        partir d'un ensemble comme ceci :
      
mysql> SELECT col_set+0 FROM nom_de_table;
        Si un nombre est enregistré dans une colonne
        SET, les bits un à un de ce nombre
        représenteront les éléments placés dans cet ensemble.
        Supposons qu'une colonne est spécifiée en tant que
        SET("a","b","c","d"), les membres ont alors
        les valeurs suivantes :
      
SET membre | Valeur décimale | Valeur binaire | 
a | 1 | 0001 | 
b | 2 | 0010 | 
c | 4 | 0100 | 
d | 8 | 1000 | 
        Si vous assignez 9 à cette colonne, cela
        donne 1001 en binaire, ce qui fait que les
        valeurs du premier et quatrième membres "a"
        et "d" sont sélectionnés et la valeur
        résultante est "a,d".
      
        Pour les valeurs se composant de plus d'un membre du
        SET, l'ordre des membres n'a pas d'importance
        lors des insertions. Le nombre d'occurrence d'un élément
        n'importe pas non plus. Lorsque la valeur sera lue
        ultérieurement, chaque élément n'apparaîtra qu'une seule
        fois, et dans l'ordre donné à la déclaration de la colonne.
        Par exemple, si une colonne est spécifiée comme
        SET("a","b","c","d"), alors
        "a,d", "d,a", et
        "d,a,a,d,d" seront tous représentés par
        "a,d".
      
        Si vous spécifiez une valeur incorrecte dans une colonne
        SET, la valeur sera ignorée.
      
        Les valeurs de SET sont triées
        numériquement. La valeur NULL précède
        toutes les autres.
      
        Normalement, vous exécuterez un SELECT sur
        une colonne SET en utilisant l'opérateur
        LIKE ou la fonction
        FIND_IN_SET() :
      
mysql>SELECT * FROM nom_de_table WHERE set_col LIKE '%value%';mysql>SELECT * FROM nom_de_table WHERE FIND_IN_SET('value',set_col)>0;
Mais ce qui suit fonctionnera aussi :
mysql>SELECT * FROM nom_de_table WHERE set_col = 'val1,val2';mysql>SELECT * FROM nom_de_table WHERE set_col & 1;
La première requête cherche les lignes qui correspondent exactement. La seconde ne cherche que les lignes contenant le premier membre du set.
        Si vous voulez connaître toutes les valeurs possible d'une
        colonne SET, vous devez utiliser :
        SHOW COLUMNS FROM nom_de_table LIKE
        nom_colonne_set et étudier la définition du
        SET dans la seconde colonne.
      
Les capacités de stockage de chaque type de colonnes de MySQL sont listés par catégories.
Capacités de stockage des colonnes numériques
| Type de colonne | Espace requis | 
TINYINT | 1 octet | 
SMALLINT | 2 octets | 
MEDIUMINT | 3 octets | 
INT,INTEGER | 4 octets | 
BIGINT | 8 octets | 
FLOAT(p) | 4 if X <= 24 or 8 if 25 <= X <= 53 | 
FLOAT | 4 octets | 
DOUBLE PRECISION, REAL | 8 octets | 
DECIMAL(M,D) | M+2 octets si D > 0, M+1 octets
              si D = 0 (D+2, si M <
              D) | 
Capacités de stockage des colonnes de temporelles
| Type de colonne | Espace requis | 
DATE | 3 octets | 
DATETIME | 8 octets | 
TIMESTAMP | 4 octets | 
TIME | 3 octets | 
YEAR | 1 octet | 
Capacités de stockage des colonnes de texte
| Type de colonne | Espace requis | 
CHAR(M) | M octets, 1 <= M <= 255 | 
VARCHAR(M) | L+1 octets, avec L <= M et
              1 <= M <= 255 | 
TINYBLOB, TINYTEXT | L+1 octets, avec L < 2^8 | 
BLOB, TEXT | L+2 octets, avec L < 2^16 | 
MEDIUMBLOB, MEDIUMTEXT | L+3 octets, avec L < 2^24 | 
LONGBLOB, LONGTEXT | L+4 octets, avec L < 2^32 | 
ENUM('valeur1','valeur2',...) | 1 ou 2 octets, suivant le nombre d'éléments de l'énumération (65535 au maximum) | 
SET('valeur1','valeur2',...) | 1, 2, 3, 4 ou 8 octets, suivant le nombre de membres de l'ensemble (64 au maximum) | 
      Les types VARCHAR, BLOB et
      TEXT sont de longueur variable, et l'espace
      disque requis dépend de la taille réelle de la valeur présente
      dans la colonne, (taille représentée par L dans le tableau
      précédent) et non pas de la taille maximale de la colonne. Par
      exemple une colonne VARCHAR(10) peut contenir
      une chaîne de 10 caractères. L'espace requis est dans ce cas là
      la longueur de la chaîne (L), plus 1 octet
      pour enregistrer la longueur de celle ci. Pour la chaîne
      'abcd', L est égal à 4 et
      l'espace requis est de 5 octets.
    
      Les types BLOB et TEXT
      requièrent 1, 2, 3, ou 4 octets pour mémoriser la taille de la
      valeur dans la colonne, suivant la longueur maximale du type. See
      Section 11.4.3, « Les types BLOB et TEXT ».
    
Si une table inclus au moins une colonne de taille variable, la ligne sera de taille variable. Notez que lorsqu'une table est créée, MySQL peut, dans certaines circonstances, changer automatiquement une colonne de taille variable en colonne à taille fixe (et vice-versa). See Section 13.2.5.1, « Modification automatique du type de colonnes ».
      La taille d'un ENUM est déterminée par le
      nombre d'éléments de l'énumération. Un octet est nécessaire
      pour les énumérations ayant jusqu'à 255 valeurs possibles. Deux
      octets sont nécessaires pour les énumérations ayant jusqu'à
      65535 valeurs possibles. See Section 11.4.4, « Le type ENUM ».
    
      La taille d'un SET est déterminé par le
      nombre de ses membres. Si il y en a N, l'objet
      occupe (N+7)/8 octets, arrondis à 1, 2, 3, 4,
      or 8 octets. Un SET peut avoir au plus 64
      membres. See Section 11.4.5, « Le type SET ».
    
      La taille maximale d'une ligne dans une table
      MyISAM est de 65534 octets. Les colonnes
      BLOB et TEXT acceptent
      jusqu'à 5-9 octets en dessous de cette taille.
    
      Pour une utilisation optimale des capacités de stockage, essayez
      d'utiliser le type le plus optimal dans chaque cas. Par exemple,
      si une colonnes du type entier sera utilisée pour des valeurs
      entre 1 et 99999, le type
      MEDIUMINT UNSIGNED sera le plus approprié.
    
      La représentation des valeurs monétaires est un problème
      commun. Avec MySQL, vous devrez utiliser le type
      DECIMAL. Il est sauvegardé en tant que
      chaîne, aucune perte de précision ne devrait avoir lieu. Si la
      précision n'est pas très importante, vous pouvez utiliser le
      type DOUBLE.
    
      Pour une haute précision, vous pouvez toujours transcrire en
      nombre décimaux, et les enregistrer dans des
      BIGINT. Cela vous permettra d'effectuer tout
      vos calculs avec des entiers et de convertir à nouveau en nombre
      décimaux au besoin.
    
Pou faciliter l'importation de code SQL issu d'autres systèmes de gestion de bases de données, MySQL convertit les types de colonnes comme le montre le tableau suivant. Cette conversion facilite l'import de structures de tables :
| Autre dénomination | Type MySQL | 
BINARY(M) | CHAR(M) BINARY | 
CHAR VARYING(M) | VARCHAR(M) | 
FLOAT4 | FLOAT | 
FLOAT8 | DOUBLE | 
INT1 | TINYINT | 
INT2 | SMALLINT | 
INT3 | MEDIUMINT | 
INT4 | INT | 
INT8 | BIGINT | 
LONG VARBINARY | MEDIUMBLOB | 
LONG VARCHAR | MEDIUMTEXT | 
LONG | MEDIUMTEXT (depuis MySQL 4.1.0) | 
MIDDLEINT | MEDIUMINT | 
VARBINARY(M) | VARCHAR(M) BINARY | 
      La conversion du type de colonnes s'effectue lors de la création.
      Si vous créez une table avec des types issus d'un autre SGBDR
      puis que vous exécutez la commande DESCRIBE
      nom_de_table, MySQL fournira la structure de la table en
      utilisant les types équivalents.
    
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.