Mariadb másodperc bevitele time típusú oszlopba

Sziasztok!

 

Érdekes problémába ütköztem a MariaDB-vel. Szeretnék bevinni adatokat egy táblába, ahol is az egyik oszlop típusa time[6] (6-os pontosságú milliszekundumok). Ebbe másodperc alapon vinném be az időket. A beszúrások nagyrésze oké, de van egy vesszőparipája. A 190, 192 és ekörnyéki értékekre hibát dob

Incorrect time value: '192' for column `gyakorlas`.`media`.`duration` at row 1

Ha mondjuk 240-et, 300-at vagy 120-at kap, gond nélkül beviszi. Mi lehet ennek oka, és esetleg a megoldása?

Köszi!

Hozzászólások

Pontosan hogyan néz ki az adat, amit beszúrnál a mezőbe? Nem lehet, hogy csak formátum problémája van? Lehet jobban jársz unix_timestampet tárolva, amit select-kor visszaalakítasz a számodra tetsző formára. Az idő maga honnét jön? Neked adnak meg egy a kliensen naplózott időt, vagy a te időd kell a beszúráskor?

Azt nem TIME formában szeretnéd tárolni, hanem egy unsigned mediumint, esetleg smallint típusban, majd abból SELECT-kor igény szerint konvertálod, akár már rögtön SQL függvénnyel. (Az odavágott INT-től kéretik tartózkodni: https://dev.mysql.com/doc/refman/8.0/en/integer-types.html)

Ahogy előttem írták, szinte biztos, hogy nem 192-t vár oda, hanem a string idő formátumot.

Köszi mindenkinek! Végül insertnél minden sorra lefuttatom, hogy másodpercből csináljon time-t, de valószínű az lesz, hogy unsigned int-ként fogom tárolni, és selectkor konvertálok. Így a beszúrás fölöslegesen sok erőforrást használ.

TheAdam

Szerkesztve: 2022. 07. 22., p – 16:58
SELECT SEC_TO_TIME(192);
+------------------+
| SEC_TO_TIME(192) |
+------------------+
| 00:03:12         |
+------------------+
1 row in set (0.00 sec)
SELECT SEC_TO_TIME(192.324234);
+-------------------------+
| SEC_TO_TIME(192.324234) |
+-------------------------+
| 00:03:12.324234         |
+-------------------------+
1 row in set (0.00 sec)

https://mariadb.com/kb/en/sec_to_time/

Rakd be az insert/update-be a függvényhívással, ha TIME-ban akarod tárolni.