在kamailio中向acc表插入新的时间戳值

zd287kbt  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(327)

嗨,我想在acc表中添加一个新culomn。我在timestamp类型的acc表中创建了一个新culomn,并将其命名为ring\u time。在每次通话中,我都将响铃时间设置为$dlg\u var,如下所示:

$dlg_var(ringtime) = $Ts;

然后在config中添加一个额外的列,如下所示:

modparam("acc", "log_extra", "src_user=$fU;src_domain=$fd;src_ip=$si;" "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd;ring_time=$dlg_var(ringtime)")

但当我尝试测试它时,我总是得到:

db_mysql [km_dbase.c:122]: db_mysql_submit_query(): driver error on query: Incorrect datetime value: '1591361996' for column kamailio.acc.ring_time at row 1 (1292) 
Jun 5 17:29:59 kamailio /usr/sbin/kamailio[22901]: ERROR: {2 102 INVITE 105a0f4a3d99a0a5558355e54b43f4e1@192.168.1.121:5060} <core> [db_query.c:244]: db_do_insert_cmd(): error while submitting query
Jun 5 17:29:59 kamailio /usr/sbin/kamailio[22901]: ERROR: {2 102 INVITE 105a0f4a3d99a0a5558355e54b43f4e1@192.168.1.121:5060} acc [acc.c:477]: acc_db_request(): failed to insert into database
eqfvzcg8

eqfvzcg81#

听起来像是SQLINSERT查询出错了,如果非要猜的话,我会说sql表中的日期格式与您推送到它的日期格式不匹配。
我不知道您的数据库的结构,但是有一个简单的技巧,当我看不到正在运行的查询时,我可以用来调试sql查询;
在机器上启动wireshark/tcpdump并捕获所有sql流量的数据包(mysql是端口3306)并复制错误。从数据包捕获中,您将能够看到kamailio的数据库引擎运行的查询。

8yoxcaq7

8yoxcaq72#

如果错误“db\u mysql[km\u dbase.c:122]:db\u mysql\u submit\u query():查询驱动程序错误:datetime值不正确:第1行kamailio.acc.ring\u time列的'1591361996'(1292)”,则'1591361996'看起来像是$dlg\u var(ringtime)的epoch。错误的“不正确的datetime值”部分看起来像是数据库试图将值存储在datetime数据类型中,因此数据类型不匹配。仔细检查,您可能需要更改ringtime以转换为datetime,或者将数据库列更改为需要epoch的类型。

相关问题