FHEM Forum

FHEM => Automatisierung => Thema gestartet von: vbs am 13 März 2015, 11:14:58

Titel: DbLog: Data too long for column 'VALUE' at row 1 at ./FHEM/93_DbLog.pm line 447.
Beitrag von: vbs am 13 März 2015, 11:14:58
Wenn ich Readings aus dem statistics-Modul in die DB loggen möchte, zB "Hour: 226.7 Day: 1520.0 Month: - Year: - (since: 2015-03-12_21:19:07 )", dann kommt die Meldung:

2015.03.13 10:59:54 2: DbLog: Failed to insert new readings into database: DBD::mysql::st execute failed: Data too long for column 'VALUE' at row 1 at ./FHEM/93_DbLog.pm line 447.


In der DB hat VALUE eine Länge von 32. Das kann ich jetzt natürlich größer machen in der DB, aber ist das der richtige Weg? Wie macht ihr das? Man könnte ja evtl. auch das Reading kürzen.
Titel: Antw:DbLog: Data too long for column 'VALUE' at row 1 at ./FHEM/93_DbLog.pm line 447.
Beitrag von: betateilchen am 13 März 2015, 21:37:38
userReadings mit den einzelnen Werten anlegen.
Titel: Antw:DbLog: Data too long for column 'VALUE' at row 1 at ./FHEM/93_DbLog.pm line 447.
Beitrag von: Markus M. am 04 März 2017, 15:33:03
Ähnlich das hier:
DBD::mysql::st execute_array failed: Data too long for column 'VALUE' at row 1 [err was 1406 now 2000000000]
executing 1 generated 1 errors at /opt/fhem/FHEM/93_DbLog.pm line 1197.
, DBD::mysql::st execute_array failed: Data too long for column 'VALUE' at row 2682 [err was 1406 now 2000000000]
executing 1 generated 1 errors at /opt/fhem/FHEM/93_DbLog.pm line 1232.


Das Problem ist, dass einigermassen sinnvolles Logging bzw. Fehlerbehandlung an der Stelle fehlt.
Woher soll ich jetzt wissen wo das Problem liegt?
Titel: Antw:DbLog: Data too long for column 'VALUE' at row 1 at ./FHEM/93_DbLog.pm line 447.
Beitrag von: JoeALLb am 13 März 2017, 15:11:52
Das aktuelle DbLog schneidet die Events ab, die länger sind als die Feldbreite in der Datenbank, also sollte ein Update schon helfen.
Ein berbreitern des Feldes in der DB funktioniert dadurch ebenfalls, die Standardbreite wurde auch auf 64 Zeichen erhöht.
Den Sinn oder Unsinn dahiner muss sich jeder selbst überlegen.

Wenn Du dann Logs suchst, die zu lange Values erzeugen, kannst Du immer nach dem Schema
lange Logeinträge suchen und die entsprechenden Devices dann nach Bedarf umkonfigurieren:

select * from history where length(value) > 30 limit 10;
(Das ist nur ein Schema, also ungetestet)


sG
Joe