NutzCN Logo
问答 @ColDefine(width = 20),中文的长度在oracle和mysql中不同。
发布于 12天前 作者 SiriusYJN 41 次浏览 复制 上一个帖子 下一个帖子
标签:

自动建表后,某列插入中文,在oracle中显示长度不够,width的处理,能够根据数据库类型进行相应处理吗?

3 回复
public String evalFieldType(MappingField mf) {
        if (mf.getCustomDbType() != null)
            return mf.getCustomDbType();
        switch (mf.getColumnType()) {
        case BOOLEAN:
            if (mf.hasDefaultValue())
                return "char(1) DEFAULT '"+getDefaultValue(mf)+"' check (" + mf.getColumnNameInSql() + " in(0,1))";
            return "char(1) check (" + mf.getColumnNameInSql() + " in(0,1))";
        case TEXT:
            return "CLOB";
        case VARCHAR:
            return "VARCHAR2(" + mf.getWidth() + ")";
        case INT:
            // 用户自定义了宽度
            if (mf.getWidth() > 0)
                return "NUMBER(" + mf.getWidth() + ")";
            // 用数据库的默认宽度
            return "NUMBER";

        case FLOAT:
            // 用户自定义了精度
            if (mf.getWidth() > 0 && mf.getPrecision() > 0) {
                return "NUMBER(" + mf.getWidth() + "," + mf.getPrecision() + ")";
            }
            // 用默认精度
            if (mf.getTypeMirror().isDouble())
                return "NUMBER(15,10)";
            return "NUMBER";
        case TIME:
        case DATETIME:
        case DATE:
            return "DATE";
        default:
            return super.evalFieldType(mf);
        }
    }

看了下OracleJdbcExpert源码,匹配VARCHAR的时候拼接的是 VARCHAR2(),能继承OracleJdbcExpert,将该方法重写改成 NVARCHAR2(),
但把nutz_jdbc_experts.js复制过来,放到 ioc/下 ,好像没有被引用 @兽总

不是放ioc下,是跟ioc同级

可以了,谢谢兽总

添加回复
请先登陆
回到顶部