Invalid data format 看语义是数据类型不符,通常这个报错出现在使用行协议写入时。
如果是批量数据写入,想定位是哪条语句的问题,需要查看客户端日志。

如何确定使用的是哪个日志

lsof -p `pidof taosadapter` | grep taoslog
  • 1.

如果没有安装lsof

ls -l /proc/`pidof taosadapter`/fd |grep taoslog
  • 1.

在日志中直接查抄报错

grep 'Invalid data format' -A2 -B2 taoslog0.0
  • 1.

通常会有如下3行报错信息:

UTL ERROR SML:0x9dfd point type and db type mismatch. db type: 5, point type: 8, key:
UTL ERROR SML:0x9dfd smlModifyDBSchemas end failed:-2147471358:Invalid data format,
UTL ERROR SML:0x9dfd smlModifyDBSchemas error : Invalid data format
  • 1.
  • 2.
  • 3.

定位错误

第一条报错显示了报错的具体原因:

db type: 5   ## 数据库中原数据类型
point type: 8 ## 写入数据的类型
key :    ##写入的语句
  • 1.
  • 2.
  • 3.

想查看数据类型编码,只能去 源代码查找:

// Data type definition
#define TSDB_DATA_TYPE_NULL       0   // 1 bytes
#define TSDB_DATA_TYPE_BOOL       1   // 1 bytes
#define TSDB_DATA_TYPE_TINYINT    2   // 1 byte
#define TSDB_DATA_TYPE_SMALLINT   3   // 2 bytes
#define TSDB_DATA_TYPE_INT        4   // 4 bytes
#define TSDB_DATA_TYPE_BIGINT     5   // 8 bytes
#define TSDB_DATA_TYPE_FLOAT      6   // 4 bytes
#define TSDB_DATA_TYPE_DOUBLE     7   // 8 bytes
#define TSDB_DATA_TYPE_VARCHAR    8   // string, alias for varchar
#define TSDB_DATA_TYPE_TIMESTAMP  9   // 8 bytes
#define TSDB_DATA_TYPE_NCHAR      10  // unicode string
#define TSDB_DATA_TYPE_UTINYINT   11  // 1 byte
#define TSDB_DATA_TYPE_USMALLINT  12  // 2 bytes
#define TSDB_DATA_TYPE_UINT       13  // 4 bytes
#define TSDB_DATA_TYPE_UBIGINT    14  // 8 bytes
#define TSDB_DATA_TYPE_JSON       15  // json string
#define TSDB_DATA_TYPE_VARBINARY  16  // binary
#define TSDB_DATA_TYPE_DECIMAL    17  // decimal
#define TSDB_DATA_TYPE_BLOB       18  // binary
#define TSDB_DATA_TYPE_MEDIUMBLOB 19
#define TSDB_DATA_TYPE_BINARY     TSDB_DATA_TYPE_VARCHAR  // string
#define TSDB_DATA_TYPE_GEOMETRY   20  // geometry
#define TSDB_DATA_TYPE_MAX        21
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

到这里,基本上就确定问题原因了。