Oracle11g 如何将字符串列配置为使用';char';作为尺寸单位,而不是';字节';在DataNucleus中
我使用DataNucleus作为持久层(JDO),并被迫使用Oracle11g作为数据库(使用11gXE进行开发)。不幸的是,自11.2版以来,Oracle11g 如何将字符串列配置为使用';char';作为尺寸单位,而不是';字节';在DataNucleus中,oracle11g,jdo,datanucleus,oracle-xe,Oracle11g,Jdo,Datanucleus,Oracle Xe,我使用DataNucleus作为持久层(JDO),并被迫使用Oracle11g作为数据库(使用11gXE进行开发)。不幸的是,自11.2版以来,VARCHAR列的默认长度语义(NLS\u length\u semantics)被设置为byte,而不是char,这意味着所有只提供大小的列都将产生如下类型定义: VARCHAR2(50 byte) 而不是: VARCHAR2(50 char) 从Oracle的角度来看,解决方案有三个方面: 在您的大小定义中声明一个单位(我正试图用JDO元数据实现
VARCHAR
列的默认长度语义(NLS\u length\u semantics
)被设置为byte
,而不是char
,这意味着所有只提供大小的列都将产生如下类型定义:
VARCHAR2(50 byte)
而不是:
VARCHAR2(50 char)
从Oracle的角度来看,解决方案有三个方面:
NLS\u LENGTH\u SEMANTICS
属性NLS\u LENGTH\u SEMANTICS
属性(这似乎不适用于“Express Edition”,我已经为此浪费了一整天)jdbcType
,sqlType
,当然还有length
。但是没有单位
任何帮助都将不胜感激。您可以通过创建表格来完成。因此,id表已经创建,列的数据类型是
VARCHAR2(50字节)
您可以尝试迁移到一个新的列,即VARCHAR2(50字节)
@hotfix谢谢您的回答。我知道我可以手工创建一个模式,并以这种方式迁移数据。但是我正在寻找一个通用的解决方案,让DataNucleus
完成所有的工作。我需要它自动工作。那么,如果您的字符串可能超过100字节,为什么不创建一个列作为varchar2(200)呢?@hotfix,因为没有可靠的方法来衡量我可以在该列中存储什么。Unicode字符的范围为2到4个字节。内容是由用户生成的。我理解,但是如果你说你的字符串可以长达100个字符。如果每个字符为4字节,则可以将400设置为长度