LINUX下通過C++訪問SQLSERVER資料庫
阿新 • • 發佈:2019-02-15
LINUX下通過C++訪問微軟的資料庫,有點麻煩。微軟官方的LINUX資料庫驅動支援不好,本例通過unixODBC,使用freeTDS驅動,再通過SOCI封裝的ODBC方式訪問資料庫(具體版本:unixODBC-2.3.4.tar.gz和freetds-0.95.19.tar.gz)
1、安裝unixODBC
tar -xvf unixODBC-2.3.0.tar.gz
./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --enable-gui=no --enable-drivers=no --enable-iconv=yes --with-iconv-char-enc=GB18030 --with-iconv-ucode-enc=UTF16LE
make
make install
2、安裝freetds驅動
tar -xvf freetds-patched.tar.gz
configure
make
make install
安裝完成後,用isql命令來驗證是否能成功連線到Sql Servcer資料庫,一定要這一步驗證了後,才能繼續編碼開發
3、安裝SOCI
tar -xvf soci-3.2.2.tar.gzcmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=./inss -DWITH_BOOST=OFF -DWITH_MYSQL=OFF -DWITH_ORACLE=OFF -DWITH_POSTGRESQL=OFF -DWITH_SQLITE3=OFF -DWITH_FIREBIRD=OFF -DWITH_DB2=OFF
make
make install
4、編寫簡單的SOCI程式碼來測試連線問題
5、驗證讀寫中文是否亂碼
如果有問題或者直接報錯,記得加上ODBC的日誌odbcinst.ini檔案中增加:
[ODBC]
TraceFile = /tmp/sql.log
Trace = Yes
如果報錯如下,可以再freeTDS配置中加上字元編碼
DIAG [HY000] [FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted 配置FREETDS:/usr/local/etc/freetds.conf,增加:
X、其他
一、微軟官方的驅動不能用,除了中文亂碼外,還斷斷續續的不穩定二、FREETDS版本0.95.0存在記憶體洩露,換用0.95.19解決問題
三、寫入資料庫時,字串會多一位(ASCII為0),需要修改backends/odbc/vector-use-type.cpp檔案中// add one for null註釋位置的程式碼