Search

2012/11/27

FireBird2.5のODBCでUTF8の設定をしておこう

DBはUTF8を使いたいところ。
そこで、下記のようにデータベースを作った。


CREATE DATABASE 'localhost:c:\db\testzaiko.fdb'
USER 'testuser' PASSWORD 'password'
PAGE_SIZE = 8192 DEFAULT CHARACTER SET UTF8;

これでOKだと思い。テーブルをてきとうに作って、日本語をinsertした。
しかし、下記のエラーでレコードを登録できない。
SQL   : [ODBC Firebird Driver][Firebird]Malformed string

日本語を無くすと記録されるので、どこかのキャラクター設定と思った。
しかし、全然分からない・・・。
いろいろやってみること1時間。やっとわかったのが下記画面でした。
ODBCのsetupで「Character Set」をNONEのままにしていた。
これをUTF8に変更。
すると、日本語もレコードが通った。
ODBCドライバーを通せば何でもできるのだろうが、はまるときははまってしまう・・・。


動作環境
OS :WinXP32bit
DB :FireBird2.5
SQLのGUIツール :A5:SQL Mk-2
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/


「そのほかのポイント的なこと」
(1)idをオートインクリメントする」
createでsequenceで連番発生させる変数を指定する。
create sequence seq_id;

開始数値の変更
alter sequence seq_id restart with 0;

sequenceを削除する
drop sequence seq_id;

insert時にnext value for seq_id によって、連番が生成される。
例)
insert into table1(field1, field2) values(
next value for seq_id, 
'test'
);


(2)データベースを任意のフォルダに作るときは、localhost:で指定。
※サーバーなら、IPアドレスを指定すれば良いと思います。
※日本語を扱うならCHARACTER SETの指定は必須!

CREATE DATABASE 'localhost:c:\db\testzaiko.fdb'
USER 'testuser' PASSWORD 'password'
PAGE_SIZE = 8192 DEFAULT CHARACTER SET UTF8;

(3)計算列がなぜかうまくいかない・・・。
ratio computed by ((aaa/bbb)*100) だと常に0になる。
ratio computed by ((aaa*100)/bbb) とすれば計算できた。基本はint型なのか?

0 件のコメント:

コメントを投稿