Oracle日期字段保存为VARCHAR2,显示奇怪的字符

时间:2011-08-23 20:51:22

标签: oracle

Oracle VARCHAR2类型是否解释任何类型的转义序列?我正在使用具有包含出生日期字段的UI的系统,但数据库将其保存为VARCHAR2。我们在数据库端的这个领域看到了奇怪的文字;像“FF”,“B”,“EG”这样的字母似乎莫名其妙。日期字段可以采用日期值(例如8-AUG-2011)或数字行(例如121234)。这些值将转换为日期。 UI不允许输入诸如“FF”或“EG”的文本。所以我们对这些如何进入数据库感到困惑。

有没有人见过类似的问题?

3 个答案:

答案 0 :(得分:3)

不,VARCHAR2类型不包含任何类型的转义序列。

听起来你正在使用的应用程序有一些相当复杂的逻辑,允许它将日期存储为各种字符串。你看到的字母可能对应用程序有意义。

这是#136的原因,日期应始终存储在DATE列中,永远存储在VARCHAR2列中。否则,一些有进取心的开发人员将决定在数据中存储一些自定义格式掩码是有意义的,以解决一些显示问题,这使得任何人都难以或不可能更新数据或报告数据在这个特定的应用程序之外。

答案 1 :(得分:0)

VARCHAR2列将存储您提供的任何数据(即通过SQL INSERT / UPDATE)。

在将输入数据存储到数据库之前,您是否对输入数据进行了任何服务器端输入验证(即不进行javascript检查)?如果不是,某些脚本或攻击者可能会尝试将恶意内容注入您的数据库或破坏您的Web应用程序。

答案 2 :(得分:0)

日期时间值可以使用to_char函数转换为varchar,输出日期格式取决于to_char函数中指定的格式。所以to_char函数的格式一定有问题, http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34510