せっかくUbuntu 16.04 LTSを導入したので、
FreeTDS関連を新たに試してみる。
環境
クライアント
- Ubuntu 16.04 LTS
- 64bitマシン
接続イメージ
php7.0-sybase <-> FreeTDS <-> SQL Server
設定
Apache_MySQL_PHPをまとめてインストール
$ sudo tasksel install lamp-server
なんとPHP 7.0がインストールされます。
Ubuntu、結構攻めてますね。
php7.0-sybaseを探す
$ apt search php7.0-sybase
php7.0-sybaseをインストール
$ sudo apt install php7.0-sybase
freetdsを探す
$ apt search freetds
freetds関係をインストール
$ sudo apt install freetds-common freetds-bin
今回は意図的にcharset=CP932を抜いている。
SQL Server2000以降のcharsetはUCS2固定なので不要とのこと。
Localization - FreeTDS Users Guide
freetds.conf
[RDBSERVER] # hostname になる
host = 192.168.0.3 # 接続するDBのIPアドレスを入れる
port = 1433 # SQL Server2000以降、標準のportは1433
tds version = 7.3 # SQL Server2005は7.2 2008は7.3 2012は7.4
client charset = UTF-8 # Client(Linux)側の文字コードセット
tsql実験
SQL Server 2008R2
- Windows Server 2008
- 日本語データベース名のデータベース
- 接続は可能
- データを呼び出すことができない。
データベース接続の様子
1> use 日本語システム
2> go
Msg 911 (severity 16, state 1) from DBSERVER Line 1:
"Database '日本語シスチE▒▒' does not exist. Make sure that the name is entered correctly."
テという文字に問題があるのかもしれない。
文字化けして相手に伝わるので接続ができない。
SQL Server 2000
- Windows 2000 Server
- DB名はalpabet
- テーブル名やカラム名は日本語
- 繋がりました。
- 3万件以上のデータ表示の問題なし
- 60万件以上のデータはないので試せず。
以前3万件でSegment faultを起こしていたので、freetds.confの
charset=CP932を抜くことで日本語をまともに扱う効果があるのかもしれない。