11
votes

Meilleure façon de stocker la plage dans une base de données MySQL?

J'aimerais stocker une quantité de temps pour quelque chose dans une base de données MySQL, pendant la durée quelque chose qui a pris, par exemple 2 heures, 5 minutes, 10 secondes. La précision jusqu'à la seconde est préférée, mais non requise. Quelle est la meilleure façon de faire cela?


3 commentaires

Le but peut faire une différence ici; Si vous conservez un nombre d'entiers de secondes, vous pouvez vous adéquater, ce qui peut être le moyen d'aller. Je n'ai pas vérifié la documentation MySQL dans un moment, mais je ne me souviens pas de MySQL ayant un type de données Timespan.


Je ne connais pas les détails de MySQL, mais dans mon expérience, si tout ce dont vous avez besoin est "à la seconde" précision, puis stockez les totauxecondes constitue le plus de sens. Il est généralement beaucoup plus facile d'analyser cette valeur à un format de temps donné, plutôt que d'avoir du code à analyser, dites une chaîne comme "00:00:00" à un format intermédiaire en premier.


Bon point @andrew. J'allais aller avec le type de temps après avoir examiné certaines des réponses, mais après avoir réfléchi à la manière dont il sera mis en œuvre dans l'application, entier W / secondes a plus de sens (beaucoup de mathématiques / comparaison se poursuivent avec des temps).


3 Réponses :


3
votes

J'aime stocker des choses dans la base de données comme unités de base. De cette façon, je peux convertir de manière fiable et avec précision à tout ce que je veux plus tard.

La seule chose que vous devez vous inquiéter de cette méthode consiste à obtenir votre précision. Si vous stockez la distance parcourue pour des voyages cross-country, des pouces ou des centimètres pourraient ne pas être ce que vous recherchez.

Dans votre cas, je stockais la portée en secondes ou en millisecondes et passez de là.


0 commentaires

18
votes

un mysql TIME TYPE peut stocker du temps couvre de ' -838: 59: 59 'TO' 838: 59: 59 '- Si cela se trouve dans votre plage requise et qu'il serait utile de présenter MySQL de présenter de manière natale de ces effondres dans HH: MM: SS forme, puis utilisez cela.

Sinon, j'irais simplement avec un type d'entier pour représenter le nombre de secondes.


0 commentaires

1
votes

Comme Andrew dit, un champ entier avec des secondes pourrait déjà faire.

Si les données sont disponibles, et il est logique de le stocker, je sauvegarderais les données dans deux horodatages MySQL avec les heures de début et de fin (également bien idéal pour l'audit ultérieur) et utilisez date_diff () pour aller chercher la durée réelle.


0 commentaires