私は Symfony2 と Doctrine2 を使用して、データベースとして Oracle を使用する必要があるアプリケーションを作成しています (これには慣れていませんが、ほとんどの場合 MySQL を使用しています)。開発ボックスに Oracle XE をインストールし、ユーザーを作成しました。
Symfony2 の設定では、接続パラメーターは次のようになります。
database_driver: oci8
database_host: localhost
database_name: xe
database_user: myusername
database_password: mypassword
database_port: 1521
database_charset: AL32UTF8
php app/console doctrine:schema:create
CLI で実行すると、スキーマは正常に作成されますが、最初のフィクスチャをphp app/console doctrine:fixtures:load
でロードしようとすると、次のエラーが発生します。
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'INSERT INTO my_currency
(id, code, name, symbol) VALUES (?, ?, ?, ?)' with params
{"1":3,"2":"RUB","3":"Russian Ruble","4":"\u0440\u0443\u0431."}:
ORA-12899: value too large for column "MYUSERNAME"."MY_CURRENCY"."SYMBOL"
(actual: 7, maximum: 4)
私のフィクスチャ スクリプトには、この行を挿入するための次のデータが含まれています。
array('RUB', 'Russian Ruble', 'руб.'),
エンティティは次のように定義されます。
Foo\MyBundle\Entity\Currency:
type: entity
table: my_currency
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
code:
type: string
length: 3
name:
type: string
length: 64
symbol:
type: string
length: 4
私が理解していることから、Oracle XEにはUTF-8のデフォルト文字セットがあるため、フィールドタイプをNVARCHAR2に設定する必要はありません(Doctrineによって自動的にVARCHAR2に設定されます)。
私がどこで間違っているのか、誰かが何か考えを持っていますか?