Précision datetime de SQL Server : le mystère de la milliseconde
Lors de l'insertion d'une valeur datetime avec des millisecondes dans une base de données SQL Server (par exemple, 2009-04-03 15:41:27.378), vous remarquerez peut-être une milliseconde apparemment perdue (par exemple, elle devient 2009-04-03 15:41 :27.377). Ce n'est pas un bug ; c'est une conséquence de la façon dont SQL Server gère la précision datetime.
Comment SQL Server stocke les valeurs temporelles
Le type de donnéesSQL Server datetime
a une limitation : il ne stocke que les valeurs temporelles avec une précision d'environ 1/300e de seconde. Cela signifie que les millisecondes ne sont pas stockées avec précision ; ils sont arrondis à l'une des trois valeurs possibles : 0, 3 ou 7.
Le processus d'arrondi
Étant donné que la valeur insérée (27,378 millisecondes) se situe entre ces valeurs prises en charge, SQL Server l'arrondit à la milliseconde autorisée la plus proche (27,377). Cela explique l'écart apparent.
Maintenir la précision à la milliseconde : solutions de contournement
Pour préserver la précision à la milliseconde, envisagez ces alternatives :
Stockage numérique : Stockez la valeur datetime sous forme de type numérique (par exemple, bigint
ou decimal
) représentant le nombre de millisecondes depuis une époque spécifique. Convertissez-le en une valeur datetime
lorsque cela est nécessaire pour l'affichage ou d'autres opérations.
Stockage basé sur une chaîne : Stockez la valeur datetime sous forme de chaîne en utilisant un format cohérent (comme aaaa-MM-jj HH:mm:ss.fff). Cela préserve la valeur complète de la milliseconde, mais nécessite une conversion pour les calculs de date/heure.
Approche hybride : Utilisez une colonne datetime
pour le stockage approximatif de la date/heure (pour des raisons de performances) et une chaîne ou une colonne numérique distincte pour stocker la valeur exacte en millisecondes.
Ces approches garantissent que vos données millisecondes restent intactes, bien qu'avec une légère augmentation de la complexité.
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!