#mysql #go
# #mysql #Вперед
Вопрос:
Я пишу программу Go, которая взаимодействует с базой данных MySQL. В 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
Как описано здесь в разделе «Информация о результате утверждения».
Я хотел бы иметь доступ к этому из моей программы Go, но я не могу понять, как это сделать или возможно ли это вообще. sql.DB.Exec()
возвращает a Result
, но у него есть только RowsAffected
поле. Это содержит сумму записанных строк удаленных строк и игнорирует пропущенные строки и, следовательно, неоднозначно (запись 3, удаление 2 и пропуск 2 — это то же самое, что запись 5, удаление 0 и пропуск 0).
Я просмотрел документацию для драйвера Go MySQL, но не смог найти там ничего, что делало бы то, что я хочу.
Есть ли способ получить доступ к этой информации?
Комментарии:
1. Спасибо за интересный вопрос. Я оставляю на ваше усмотрение написать запрос функции / запрос на извлечение для драйвера Go MySQL.
Ответ №1:
Информация на самом деле является ER_LOAD_INFO «ошибка» (условно информация) сообщение сервера.
Это передается как информационное сообщение в ответе OK с сервера.
Глядя на декодирование пакета OK в go, он не анализирует информацию (информацию о состоянии, читаемую человеком). При установлении соединения убедитесь, что clientSessionTrack является частью флагов подключения.
Итак, несколько небольших улучшений в драйвере Go MySQL, и вы сможете получить к нему доступ.
Комментарии:
1. Спасибо за исчерпывающий ответ / исследование!
2. Отправленная проблема: github.com/go-sql-driver/mysql/issues/1179