IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Choix du type de variable pour la durée d'un sous-titre d'une vidéo.


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 16
    Points
    16
    Par défaut Choix du type de variable pour la durée d'un sous-titre d'une vidéo.
    Bonjour à tous,

    J'ai un fichier format srt et je souhaite enregistrer les sous-titres dans la base de données.
    Un sous-titre a trois caractéristiques :
    - numéro du sous-titre
    - temps de début sous-titre
    - temps de fin du sous-titre
    - texte du sous-titre

    voici un exemple d'un sous-titre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1
    00:00:00,535 --> 00:00:02,462
    Je suis professeur d'informatique et
    d'ingéniérie informatique
    Mon problème lors de la création de la table Morceau est quel type de variable mysql utiliser pour représenter le temps de début et de fin du morceau (il y a heure, minutes, secondes, millisecondes).
    J'ai pensé à TIME ou varchar. car lors de l'insertion d'une donnée TIME avec des millisecondes, on doit utiliser un point pour séparer les secondes des millisecondes. Mais je dois insérer une virgule et non un point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create table Morceau(id int AUTO_INCREMENT, numero_morceau int, debut_morceau TIME(6),fin_morceau TIME(6), PRIMARY KEY(id));
    lors de l'insertion, je dois utiliser par exemple :
    insert into morceau(numero_morceau,debut_morceau, fin_morceau,texte)values(1,'00:00:00.000535','00:00:02.000462','Je suis professeur d'informatique et d'ingéniérie informatique');

    Ou bien je dois utiliser le type varchar et transformer le contenu au format souhaité. Mais je n'arrive pas à le faire.

    Je vous remercie d'avance de toute suggestion.

    Avatar71

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bnjour,

    Une valeur temporelle doit être stockée dans une colonne de format temporel

    Vous pouvez donc utiliser un format datetime, time ou timestamp selon la précision souhaitée, cf. http://dev.mysql.com/doc/refman/5.7/en/datetime.html

    mais JAMAIS du varchar !
    Si vous utilisez un format inapproprié genre varchar, alors vous risquez de stocker n'importe quoi dans la base, vous compromettez les tris, les aggrégats (max, min)etc... donc surtout pas ça

    Quand vous dites
    Citation Envoyé par Avatar71 Voir le message
    J'ai pensé à TIME ou varchar. car lors de l'insertion d'une donnée TIME avec des millisecondes, on doit utiliser un point pour séparer les secondes des millisecondes. Mais je dois insérer une virgule et non un point.
    Je suppose que vous parlez de la restitution de l'information à l'écran, sur une liste ou tout autre support.
    Ne polluez pas votre base de données à cause de souci de présentation, déléguez cet aspect à la couche logicielle dont c'est la fonction, et assurez la fiabilité de vos données en utilisant les formats de données adéquat, en l'occurrence un format de type temporel dans votre cas.

  3. #3
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    C'était très claire. Seulement, si j'utilise TIME et évidemment c'est le format le plus proche de mon cas et que je dois récupérer les données des colonnes debut_morceau et fin_morceau, il y aurait un point au lieu de la virgule. Mon objectif serait de construire à tout moment un fichier srt à partir de la base de données. ou alimenter ma base à partir d'un nouveau fichier srt. Or dans le fichier srt, le point est remplacé par une virgule.

    Merci d'avance pour votre aide.

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Avatar71.

    Inutile de faire un bidouillage en php ou autre, pour transformer ta virgule en point.
    Pour résoudre ton problème, utilises une fonction comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `clef`      int unsigned NOT NULL auto_increment primary key,
      `date`      date         NOT NULL,
      `time`      time         NOT NULL,
      `datime`    datetime     NOT NULL,
      `timestamp` timestamp(6) NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    SHOW WARNINGS
    --------------
     
    --------------
    insert into `test` (`date`,`time`,`datime`,`timestamp`) values (curdate(), curtime(), now(), current_timestamp(6))
    --------------
     
    --------------
    select * from test
    --------------
     
    +------+------------+----------+---------------------+----------------------------+
    | clef | date       | time     | datime              | timestamp                  |
    +------+------------+----------+---------------------+----------------------------+
    |    1 | 2016-04-06 | 17:28:21 | 2016-04-06 17:28:21 | 2016-04-06 17:28:21.289059 |
    +------+------------+----------+---------------------+----------------------------+
    --------------
    drop function if exists `modif`
    --------------
     
    --------------
    create function modif(
      chaine  char(26)
    )
      returns timestamp(6)
      language sql
    begin
      return replace(chaine, ',', '.');
    end
    --------------
     
    --------------
    insert into `test` (`date`,`time`,`datime`,`timestamp`) values (curdate(), curtime(), now(), modif("2015-12-31 23:59:59,123456"))
    --------------
     
    --------------
    select * from test
    --------------
     
    +------+------------+----------+---------------------+----------------------------+
    | clef | date       | time     | datime              | timestamp                  |
    +------+------------+----------+---------------------+----------------------------+
    |    1 | 2016-04-06 | 17:28:21 | 2016-04-06 17:28:21 | 2016-04-06 17:28:21.289059 |
    |    2 | 2016-04-06 | 17:28:21 | 2016-04-06 17:28:21 | 2015-12-31 23:59:59.123456 |
    +------+------------+----------+---------------------+----------------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TPW] Jeux de rôle : quels types de variables pour coder des personnages ?
    Par maxiNoob dans le forum Turbo Pascal
    Réponses: 81
    Dernier message: 07/12/2009, 11h54
  2. free soft : pour masqué un sous titre dans une vidéo?
    Par devlopassion dans le forum Vidéo
    Réponses: 0
    Dernier message: 03/02/2009, 12h00
  3. Quel type de variable pour enregistrer un temps ?
    Par trigone dans le forum Langage
    Réponses: 9
    Dernier message: 07/12/2008, 20h15
  4. Choix de type de machine pour RAC
    Par spoon2008 dans le forum Administration
    Réponses: 22
    Dernier message: 16/10/2008, 21h41
  5. Réponses: 2
    Dernier message: 05/02/2008, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo