Невозможно подключиться к стороннему драйверу ODBC в Go с помощью alexbrainman/odbc в Linux

Я пытаюсь подключиться к источнику данных с помощью стороннего драйвера ODBC (можно загрузить здесь) в Go с помощью драйвера ODBC alexbrainman. Я протестировал рассматриваемый DSN, используя:

isql -v "CData Redis Source"

Там все работает как положено. И я знаю, что у меня установлен unixODBC 2.3.1 (isql --version).

Проблема

Когда я пытаюсь запустить следующую программу Go, я получаю это сообщение об ошибке, порожденное вызовом db.Ping() (который Google переводчик, похоже, не может перевести):

SQLDriverConnect: {㄰こ0} [unixODBC]湉慶楬⁤潣湮捥楴湯猠牴湩祳瑮硡愠⁴湩敤⁸ㅛ㩝

Мой код:

package main

import (
  _ "github.com/alexbrainman/odbc"
  "database/sql"
  "log"
)

func main() {
  db, err := sql.Open("odbc","DSN=CData Redis Source")
  if err != nil {
    log.Fatal(err);
  }
  
  var (
    name string
  )
  
  rows, err := db.Ping()
  if err != nil {
    log.Fatal(err)
  }
}

Я вижу ту же ошибку, если делаю db.Query() или db.Prepare().

Детали

  • Убунту 16.04.3 ЛТС
  • UnixODBC 2.3.1
  • Драйвер ODBC программного обеспечения CData для Redis
  • go1.6.2 линукс/амд64
  • github.com/alexbrainman/odbc

Запрос

Я был бы рад получить перевод сообщения об ошибке, чтобы помочь мне отлаживать И/ИЛИ некоторую помощь в определении того, почему мое сообщение об ошибке не на английском языке, И/ИЛИ фактическое предлагаемое решение сообщения об ошибке.


person Jerod Johnson    schedule 07.11.2017    source источник
comment
пытаюсь переместить этот импорт: _ "github.com/alexbrainman/odbc" после стандартного: "database/sql"   -  person Yandry Pozo    schedule 07.11.2017
comment
Я попытался поменять местами импорт, не повезло. Спасибо @YandryPozo   -  person Jerod Johnson    schedule 07.11.2017
comment
Мне это больше похоже на проблему с драйвером unixODBC и/или CData. Проверьте свой DSN с помощью isql. Попробуйте подключиться и запросить некоторые данные. После того, как unixODBC и ниже разобрались, начальная сторона, как правило, должна работать без проблем. Я также подозреваю, что загадочное сообщение об ошибке интерпретируется как utf-16 или что-то в этом роде.   -  person Seva    schedule 08.11.2017
comment
Если isql работает, а код go по-прежнему не работает. Вы также можете попробовать проверить, с какими библиотеками odbc связан ваш двоичный файл go, и сравнить его с isql.   -  person Seva    schedule 08.11.2017
comment
isql точно работает. Я посмотрю связанные библиотеки. Спасибо, @Сева   -  person Jerod Johnson    schedule 08.11.2017
comment
@ Сева, я сравнил связанные библиотеки, и они одинаковые, есть другие мысли?   -  person Jerod Johnson    schedule 08.11.2017


Ответы (1)


Оказывается, мне нужно было убедиться, что драйвер CData настроен на использование кодировки UTF-16, как того требует unixODBC. Для этого я отредактировал INI-файл драйвера:

/opt/cdata/cdata-odbc-driver-for-redis/lib/cdata.odbc.redis.ini

[Driver]
DriverManagerEncoding = UTF-16

Как только это было сделано, драйвер CData работал с драйвером базы данных alexbrainman/odbc (и другими драйверами базы данных ODBC, связанными с Go), как и ожидалось.

person Jerod Johnson    schedule 08.11.2017