gpt4 book ai didi

php - 使用 Doctrine2 和 Symfony2 将 unicode 数据插入 Oracle 数据库

转载 作者:行者123 更新时间:2023-12-02 05:24:18 25 4
gpt4 key购买 nike

我正在使用 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

在 CLI 上运行 php app/console doctrine:schema:create 时,模式已成功创建,但是当尝试使用 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)

我的 fixtures 脚本中包含以下用于插入此行的数据:

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(它们已设置为 VARCHAR2,由 Doctrine 自动设置)。

有人知道我哪里出错了吗?

最佳答案

您的问题并非来自 PHP:您的 "MY_CURRENCY"."SYMBOL" 列可能定义为 VARCHAR2(4 byte) 而不是 VARCHAR2 (4 个字符)

由于一个 unicode 字符可能占用多个字节,因此在定义表 变量时必须使用 CHAR。这就是您收到 Oracle 错误的原因。

您应该能够修改您的表格:

ALTER TABLE MY_CURRENCY MODIFY (SYMBOL VARCHAR2(4 CHAR));

然后将任意 4 个字符插入此列。

关于php - 使用 Doctrine2 和 Symfony2 将 unicode 数据插入 Oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com