【问题标题】:Very long text in OracleOracle 中很长的文本
【发布时间】:2018-01-08 14:38:56
【问题描述】:

我想知道在 ORACLE 数据库字段中保存超长文本的最佳做法是什么?

我使用 Coldfusion 从表单中将邮件的文本内容保存在 Oracle 数据库中。我目前在我的数据库字段中使用 LONG 类型。我在保存很长的文本时遇到问题(有许多特殊字符,如 /、"、%、$、& 和其他字符)我收到错误 502(网关错误)。如果很长的文本包含一些特殊字符,那不是问题。

你能帮我解决这个问题吗?

提前感谢您的帮助。

问候,

【问题讨论】:

  • 你看过 CLOB 吗?就个人而言,我从一开始就避免使用 LONG 列——它们不过是麻烦
  • Oracle 告诉你not to create new LONG columns。请改用 CLOB。但这不太可能是 Coldfusion 的问题 - 听起来像是编码问题。
  • LONG 已被弃用多年,我认为根本没有理由使用它。 LONG Data Type 的限制列表很长。
  • @WernfriedDomscheit - 当然,当 Oracle 告诉我们不要使用 LONG 时,他们是从嘴里说出来的。 (当然,这是正确的建议。)他们(Oracle)本身仍然在数据字典中使用LONG 而不是CLOB,用于明显属于文本类型的列。他们可以编造任何他们想要的借口,但这并不能改变他们没有听从自己建议的事实。很难责怪用户跟随 Oracle 自己的领导(尽管我们都同意,一个不应该使用LONG数据类型)。
  • “Bad gateway”听起来不像是 Oracle 在 LONG 列(或任何其他数据类型)中使用特殊字符时遇到的问题。该错误是网络错误,但它可能是由“围绕”Oracle 代码的代码引起的。似乎是 ColdFusion 问题(或者如果您编写了任何代码,也可能是您自己的代码问题 - 比如说用 PHP)。

标签: oracle coldfusion special-characters gateway


【解决方案1】:

在数据库中使用CLOB 列。

在 ColdFusion 中使用绑定参数插入值。

<cfquery name="insert_long_text" datasource="your_datasource_name">
INSERT INTO your_table(
  id,
  email
) VALUES (
  <cfqueryparam value="#your_id_value#"    cfsqltype="CFL_SQL_INTEGER" />,
  <cfqueryparam value="#your_email_value#" cfsqltype="CFL_SQL_CLOB" />
)
</cfquery>

或者将值(再次使用绑定参数)传递给 Oracle 存储过程。

如果消息特别长并且将其加载到内存中会产生性能问题,那么您可能需要使用 Java(ColdFusion 的构建基础)来流式传输文件 (example streaming BLOBs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-01-19
    • 2020-08-20
    相关资源
    最近更新 更多