エンジニアの方にとってみれば、SQL は使えてあたりまえかもしれませんが、営業や管理部の人からすれば魅惑の魔法といわれることもあります。 しかし非エンジニアの方でも SQL が使えた方がいいですし、 そのほうがエンジニアの作業も楽になります。
ここではまず、 非エンジニアの方が SQL を使えるようにするための準備作業について解説します。
続きを読む 見るための データベース・SQL 環境設定エンジニアの方にとってみれば、SQL は使えてあたりまえかもしれませんが、営業や管理部の人からすれば魅惑の魔法といわれることもあります。 しかし非エンジニアの方でも SQL が使えた方がいいですし、 そのほうがエンジニアの作業も楽になります。
ここではまず、 非エンジニアの方が SQL を使えるようにするための準備作業について解説します。
続きを読む 見るための データベース・SQL 環境設定FuelPHP でどのデータベースが使えるのか、コードを覗いてみました。
FuelPHP では 次の DBMS を扱うことができます。 扱うことができるといってもドライバとして参照するというだけで、 完璧に使えるわけではありません。
まずはマニュアルを読みます。 Database Introduction
のところに Can be mysql, mysqli or pdo
と あります。 つまり、 mysql の専用ドライバか、PDOドライバが使えるんですね。
続いて PDO について PHP のドキュメント を確認します。 すると、上述の DBMS すべてについて PDO が使えることがわかります。 もちろん PDOドライバがマシンに入っていればの話ですし、PDOとDBMSのバージョンには気をつけないといけませんね。
本当に PDO で繋がるのか? と思ったら、 FuelPHP のコアファイルの中の接続部分を担っているコードを見ましょう。 mysql, mysqli, PDO の3通りの connection.php があり、 PDO であれば PDO ドライバを使って DB に接続するようになっていることがわかります。
sqlite を使う場合にはいくつか気をつけることがあります。 (FuelPHP version 1.7.2)
Primary Key を他のデータベースと同じように設定しようとすると migration が動きません。 sqlite3 では、 Primary Key に名前をつけることができません。 例えば MySQL なら Primary Key
となるところが、 sqlite3 だと id
(id
)Primary Key (
というようになります。id
)
直接SQLを作って実行するか、 FuelPHP の該当箇所を書き換えるかして凌ぐしかないです。 Primary Key を使わないという選択肢もありますが、おすすめはしません。
また通常は migration file を php oil を使って作成すると 自動で UNSIGNED
の id
が作成されて AUTO_INCREMENT
が設定されますが、 sqlite ではこれが動きません。 sqlite では AUTO_INCREMENT
ではなく AUTOINCREMENT
になります。 いまのところ自動生成のスクリプトでは対応していませんので FuelPHP の core
のコードを変更する必要があります。 そして自動生成される UNSIGNED
は 削除しましょう。 sqlite では UNSIGNED BIT INT
というのが使えますが、 使ったところで INTEGER
と解釈されます。
sqlite3 では charset の指定方法が他のデータベースとは異なります。 PRAGMA
statement を使います。 (確か sqlite3 では標準文字コードが utf-8 だったと思います。)
データベースの設定(config/db.php
)で文字コードの指定をしないと php oil migrate
を実行する際に CREATE TABLE
の構文で 末尾に DEFAULT CHARACTER SET utf8
のついたSQLが発行されてしまい、エラーになります。 これを防ぐためには charset => ''
と、 charset
に 空文字列 を指定します。 すると、 DEFAULT
から始まる文字コード指定部分がなくなり、 sqlite3 でも php oil migrate
が動くようになります。
db.php
は次のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php return array( 'default' => array( 'type' => 'pdo', 'connection' => array( 'dsn' => 'sqlite:'.APPPATH.'migrations/'.Fuel::$env.'.sqlite3', ), 'table_prefix' => '', 'charset' => '', ), ); |
このようにすると、 環境ごとに別の DB が作成されます。 table_prefix
は php oil r migration
の時には不要ですが、 php oil r migration:down
の時に必要になることがあります。
migration ファイル を作っても動きません。 これは Syntax が MySQL とだいぶ違うからです。 FuelPHP に PostgreSQL を使うためのプラグインがあるのでそちらを使うという方法もあります。
charset に値が入っていると 接続情報(dns)に charset が含まれるようになるのですが、 PostgreSQL はこれを受け付けません。 そこで charset = ''
と設定しておきましょう。 この点は SQLITE と同じです。
php oil g migration create_xxx
のようにして テーブル作成のマイグレーションファイルを作成すると、 id カラム が自動的に作成され、 'constraint' => 11
という設定がされます。 この状態だと テーブル作成の SQL で id カラムは INT(11)
に指定されます。 しかし、 PostgreSQL は INT(11)
を受け付けません。 INT
なら SQL が通ります。
そこで 'constraint' => 11
の設定を削除します。
pg_dump でエクスポートする場合、 -s
, -a
のオプションをつけることで挙動が多少変わる。 -s
, -a
オプションは次のような場合に使われる。