web-dev-qa-db-fra.com

Définir une colonne comme horodatage dans MySql Workbench?

C'est peut-être une question très élémentaire, mais je n'ai jamais créé de tableau avec TIMESTAMP() auparavant, et je ne sais pas trop quoi mettre comme paramètres. Par exemple, ici: 

enter image description here

Je viens de mettre au hasard TIMESTAMP(20), mais que signifie le 20 comme paramètre ici? Que faut-il mettre ici? 

J'ai googlé la question, mais je n'ai vraiment rien trouvé alors ... Quoi qu'il en soit, je suis nouveau sur sql, toute aide serait donc grandement appréciée, merci !! 

12
ocean800

MODIFIER

Depuis MySQL 5.6.4, le type de données TIMESTAMP(n) spécifie n (0 à 6) chiffres décimaux de précision pour des fractions de seconde.

Avant MySQL 5.6, MySQL ne supportait pas les fractions de secondes stockées dans le type de données TIMESTAMP.

Référence: https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html


Nous n'avons pas besoin de spécifier un modificateur de longueur sur une TIMESTAMP. Nous pouvons simplement spécifier TIMESTAMP par lui-même.

Sachez toutefois que la première colonne TIMESTAMP définie dans la table est soumise à une initialisation et une mise à jour automatiques. Par exemple:

create table foo (id int, ts timestamp, val varchar(2));

show create table foo; 

CREATE TABLE `foo` (
`id` INT(11) DEFAULT NULL,
`ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`val` VARCHAR(2) DEFAULT NULL
) 

Ce qui se passe entre parenthèses après un type de données dépend de son type, mais pour certains types de données, il s'agit d'un modificateur de longueur.

Pour certains types de données, le modificateur de longueur affecte la longueur maximale des valeurs pouvant être stockées. Par exemple, VARCHAR(20) permet de stocker jusqu'à 20 caractères. Et DECIMAL(10,6) autorise les valeurs numériques avec quatre chiffres avant la virgule décimale et six après, avec une plage effective comprise entre -9999,999999 et 9999.999999.

Pour les autres types, le modificateur de longueur n'affecte pas la plage de valeurs pouvant être stockée. Par exemple, INT(4) et INT(10) sont tous deux des nombres entiers, et les deux peuvent stocker la plage complète des valeurs autorisées pour le type de données entier.

Ce que le modificateur de longueur fait dans ce cas est simplement informatif. Il spécifie essentiellement une largeur d'affichage recommandée. Un client peut s'en servir pour déterminer la quantité d'espace à réserver sur une ligne pour afficher les valeurs de la colonne. Un client n'a pas à le faire, mais cette information est disponible.

MODIFIER 

Un modificateur de longueur n'est plus accepté pour le type de données TIMESTAMP. (Si vous utilisez une très ancienne version de MySQL et que celle-ci est acceptée, elle sera ignorée.)

8
spencer7593

C’est la précision, mon ami, si vous définissez par exemple (2) comme paramètre, vous obtiendrez une date avec une précision du type: 2015-12-29 00:00:00 . 00 , d’ailleurs le maximum la valeur est 6.

6
Diego Nieto

Cette syntaxe semble provenir de l'ancienne version de MySQL, antérieure à 4.1. Il a été complètement supprimé de 5.5 https://dev.mysql.com/doc/refman/5.0/en/upgrading-from-previous-series.html

Il est donc inutile de spécifier une largeur ici, car elle peut être ignorée. Quelle version utilisez-vous?

2
Kim Ryan

MySQL 5.7 semble prendre en charge cette syntaxe. L'argument transmis est la précision. TIMESTAMP (3) permettra une précision à la milliseconde. 6 est la plus grande précision autorisée.

référence: http://dev.mysql.com/doc/refman/5.7/en/datetime.html

1
Limabean