我正在编写一个与MySQL数据库交互的Go程序。在MySQL中,当您执行LOAD DATA
查询时,除了常规的X rows affected
行之外,您还会获得包含更详细信息的行:
mysql> LOAD DATA LOCAL INFILE 'many-lines.tsv' REPLACE INTO TABLE test_table (id, timestamp);
Query OK, 6 rows affected (0.01 sec)
Records: 3 Deleted: 3 Skipped: 0 Warnings: 0
语句结果信息部分下的As documented here。我很希望能够从Go程序中访问它,但是我无法弄清楚它是怎么做到的,甚至是不可能的。
sql.DB.Exec()
returns a Result
,但是那个only has a RowsAffected
field。它包含写入的行的总和+删除的行,并且忽略跳过的行,因此是模棱两可的(写入3,删除2和跳过2与写入5,删除0和跳过0相同)。我浏览了documentation for the Go MySQL driver,但找不到任何可以满足我需求的东西。
有没有办法获取这些信息?
最佳答案
该信息实际上是服务器的ER_LOAD_INFO“错误”(概念上是信息)消息。
它从服务器作为信息消息在OK response中进行通信。
看OK packet in go的解码,它没有解析info (human readable status information)。建立连接时,请确保clientSessionTrack是连接标志的一部分。
因此,对Go MySQL驱动程序进行了一些小的增强,您将可以访问它。
关于mysql - 如何从golang MySQL套件中获得详细的LOAD DATA结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65136607/