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!
- 298 megtekintés
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?
- A hozzászóláshoz be kell jelentkezni
Sima másodpercben van az időtartam, pl. 192 mp az 3 perc 12 mp. Médiafájlok hossza, szóval nincs körülötte semmi extra:D
TheAdam
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html
Például szerintem ezt jobban szeretné 192 másodperc kifejezésére: '00:03:12'
- A hozzászóláshoz be kell jelentkezni
Ha jól értem, akkor a 192 az 1 perc 92 mp-t jelent számára.
A kürtőskalács egy nagy lyuk, tésztával faszán körbetekerve.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Azt a smallint-mediumint dolgot nézd meg (unsinged smallint asszem 65k-ig megy, azért az már nem egy rövid videjó). Ha sok a rekordod és bennük meződ, akkor nagyon nem lesz mind1, hogy mekkorára hízik a táblád.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni