精华内容
下载资源
问答
  • 不小心把数据库好几张表的char类型的字段原长度1、2、3的都改为4了。增加长度后,数据库会自动填充空格,结果项目出问题了。老老实实找方法改回来。 这里只贴出我的解决方法:--如果要缩减长度的字段中含有 not null...

    不小心把数据库好几张表的char类型的字段原长度1、2、3的都改为4了

    0818b9ca8b590ca3270a3433284dd417.png。增加长度后,数据库会自动填充空格,结果项目出问题了

    0818b9ca8b590ca3270a3433284dd417.png。老老实实找方法改回来。

    这里只贴出我的解决方法:

    --如果要缩减长度的字段中含有 not null 的,需要进行步骤1、2、3、4、10,否则跳过。 --1导出表数据   略去。。。 --2清空表数据 truncate table tbl_cust_if_seller; --3将not null 字段  设为null  alter table tbl_cust_if_seller modify is_signed_protocal    char(4) null; --4导入表数据 略去。。。 --5添加表字段 alter table tbl_cust_if_seller add    is_signed_protocal_bak    char(4); alter table tbl_cust_if_seller add    curcd1_bak                char(4); alter table tbl_cust_if_seller add    curcd2_bak                char(4); alter table tbl_cust_if_seller add    curcd3_bak                char(4); alter table tbl_cust_if_seller add    curcd4_bak                char(4); alter table tbl_cust_if_seller add    curcd5_bak                char(4); alter table tbl_cust_if_seller add    short_section_curcd_bak   char(4); --6为新增字段赋值 update tbl_cust_if_seller set  is_signed_protocal_bak =  is_signed_protocal ,  curcd1_bak             =  curcd1             ,  curcd2_bak             =  curcd2             ,  curcd3_bak             =  curcd3             ,  curcd4_bak             =  curcd4             ,  curcd5_bak             =  curcd5             ,  short_section_curcd_bak=  short_section_curcd;    --7修改原字段值为空  update tbl_cust_if_seller set is_signed_protocal =  '', curcd1             =  '', curcd2             =  '', curcd3             =  '', curcd4             =  '', curcd5             =  '', short_section_curcd=  '';    --8修改原字段长度 alter table tbl_cust_if_seller modify  is_signed_protocal    char(1); alter table tbl_cust_if_seller modify  curcd1                char(3); alter table tbl_cust_if_seller modify  curcd2                char(3); alter table tbl_cust_if_seller modify  curcd3                char(3); alter table tbl_cust_if_seller modify  curcd4                char(3); alter table tbl_cust_if_seller modify  curcd5                char(3); alter table tbl_cust_if_seller modify  short_section_curcd   char(3); --9原字段赋值 update tbl_cust_if_seller set  is_signed_protocal =  substr(is_signed_protocal_bak ,1,1),  curcd1             =  substr(curcd1_bak             ,1,3),  curcd2             =  substr(curcd2_bak             ,1,3),  curcd3             =  substr(curcd3_bak             ,1,3),  curcd4             =  substr(curcd4_bak             ,1,3),  curcd5             =  substr(curcd5_bak             ,1,3),  short_section_curcd=  substr(short_section_curcd_bak,1,3);  --10恢复not null  alter table tbl_cust_if_seller modify is_signed_protocal    char(1) not null;   --11删除新增字段 alter table tbl_cust_if_seller drop (is_signed_protocal_bak   ); alter table tbl_cust_if_seller drop (curcd1_bak             ); alter table tbl_cust_if_seller drop (curcd2_bak             ); alter table tbl_cust_if_seller drop (curcd3_bak             ); alter table tbl_cust_if_seller drop (curcd4_bak               ); alter table tbl_cust_if_seller drop (curcd5_bak               ); alter table tbl_cust_if_seller drop (short_section_curcd_bak);

    展开全文
  • 关于数据库CHAR类型的问题

    千次阅读 2018-12-08 14:48:36
    数据库char类型表示固定长度, 例如char(2), 表示两个长度, 如果存入一个字符"1", 会自动向后补位一个空格, 变成"1 "来满足char(2)的约束. 由于业务原因使用的oracle, 其中字段名为EDU_LEVEL的数据格式被人设置为了...

    数据库中char类型表示固定长度, 例如char(2), 表示两个长度, 如果存入一个字符"1", 会自动向后补位一个空格, 变成"1 "来满足char(2)的约束.

    由于业务原因使用的oracle, 其中字段名为EDU_LEVEL的数据格式被人设置为了char(2):
    2018_12_08_14_35_28_

    实际存入的是一位数字, 并对其做了字典, 如下:
    2018_12_08_14_37_00_

    在做业务时遇到问题:
    2018_12_08_14_38_38_

    因为前台保存字典类型为map类型, 根据字典的键获得值, 例如根据1能获取到值"小学".

    但是由于char(2)的约束, 后台传来的值为"1 ", 多了一个空格. 查看后台传来的值:
    2018_12_08_14_43_16_

    可以看到edu_level字段的值多了一个空格. 前台map中根据这样的键来取到的值就是undefined了. 调用undefined的value属性就会报如下错:

    TypeError: Cannot read property 'value' of undefined

    解决办法可以将edu_level改为数字类型或varchar类型, 避免空格的自动填充.

    之前自己建表这种类型值都会设置为数字类型, 遇到这问题一下子没反应过来. 基础知识很重要啊... 有时候被坑完全是知识掌握的不牢固.

    展开全文
  • 在用hibernate查询oracle数据库时,如果条件中有char类型的字段,那么参数的长度,要和数据库char类型长度一致,长度不够的,用空格补齐,才可以正确的执行查询。 如: 数据库中A字段的类型是char(2) 如果...
    在用hibernate查询oracle数据库时,如果条件中有char类型的字段,那么参数的长度,要和数据库中char类型的长度一致,长度不够的,用空格补齐,才可以正确的执行查询。
    如:
    数据库中A字段的类型是char(2)
    如果查询表中A字段为'1'的数据那么,设置条件是就应该在'1'后面补一个空格。
    即:'1 '方可。
    如果使用原生SQL进行查询的话,就不用补空格了。
    展开全文
  • * YM 在数据库char类型,字符长度为8,而字段为年月 例如:202101,而要和数据库char类型长度一致,长度不够的,用空格补齐。 */ if (StringUtils.isNotEmpty(ym)) { sql += " and mapp.YM=:YM"; params.put...

    问题分析:

    1)去掉按月份搜索的条件是可以的查询到数据。

    2)拼接sql的形式是可以查询到信息的数据。

    3)用其他Varchar2类型的字段动态绑定参数查询是可以的。

    /**
    * YM 在数据库为char类型,字符长度为8,而字段为年月 例如:202101,而要和数据库中char类型的长度一致,长度不够的,用空格补齐。
    */
    if (StringUtils.isNotEmpty(ym)) {
        sql += " and mapp.YM=:YM";
        params.put("YM", ym);
    }
    

    结论:该问题可能和字段类型和hibernate的动态绑定有关系。

    查询材料解释:

    https://community.oracle.com/tech/developers/discussion/comment/506702#Comment_506702

    Select * From table Where column = ?
    setObject(1, "compValue")
    
    will never return anything if the type of column would be e.g. CHAR(20)
    
    This behaviour is inconsistent to executing the same select as statement in the following form
    
    Statement.executeQuery(Select * From table Where column = "compValue")
    
    which will return all rows, where the value matches.
    
    The difference in the behaviour lies in the fact, that for a PreparedStatment the number of characters must match.
    
    
    ==================================================================================
    
    
    use setFixedCHAR(....).,
     
    quote from Oracle9i JDBC API Docs
     
     
    public void setFixedCHAR(int paramIndex,
    java.lang.String x)
    throws java.sql.SQLException
     
    Sets the disignated parameter to a String and executes a non-padded comparison with a SQL CHAR.
     
    CHAR data in the database is padded to the column width. This leads to a limitation in using the setCHAR() method to bind character data into the WHERE clause of a SELECT statement--the character data in the WHERE clause must also be padded to the column width to produce a match in the SELECT statement. This is especially troublesome if you do not know the column width.
     
    setFixedCHAR() remedies this. This method executes a non-padded comparison.
     

    大体意思就是说采用CHAR类型,是固定类型,如果长度不够会用空格补齐,因此采用PreparedStatement动态参数绑定查询时,要采用 OraclePreparedStatement 的setFixedCHAR() 设置char类型的字段。

    解决办法:

    Hibernate底层是基于PrepardStatement的,但是设置参数是没办法指定setFixedCHAR(),常用的时采用如下方式 query.setParameter(key, map.get(key)); 因此使用setFixedCHAR()的方式行不太通。

    1)将字段trim化,去除空格(不推荐,如果在该字段上有索引的化,索引会不起作用)。

     if (StringUtils.isNotEmpty(ym)) {
                sql += " and trim(mapp.YM)=:YM";
                params.put("YM", ym);
            }

    2)将字段类型改为varchar2类型 (项目中使用,推荐使用)。

    展开全文
  • 现代数据库一般都支持CHAR与VARCHAR字符型字段类型CHAR是用来保存定长字符,存储空间的大小为字段定义的长度,与实际字符长度无网上有很多关于char和varchar的相关比较,但是都历史悠久,这里转载一篇信息比较新...
  • 达梦数据库varchar类型长度解析

    千次阅读 2020-04-03 23:37:46
    我们在数据迁移或是往数据表中导入中文字符时,经常会出现varchar类型超过字符长度的...在基表中,定义char类型的列时,其最大存储长度数据库页面大小决定,可以指定一个不超过其最大存储长度的正整数作为字符长...
  • 一,长度的问题。 char类型长度是固定,不会变。假如char(5)存储’abc’和’abcde’的长度都...可以看到字符的长度是三,但是实际存储到数据库的也是三的长度,不会像char类型会用空格填充。但是你如果用于储存长度
  • 数据库char and varchar

    2017-08-30 11:21:19
    在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔门的理由。...
  • 数据库字符类型char和varchar的区别 char char数据类型用来存储长度为n个字节的固定长度非Unicode字符数据,每个字符占一个字节。当定义一列为此类型时,必须制定列长,否则默认长度为1, 格式:char[(n)] 说明:n:1...
  • 在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库数据库类型,一般参考的都是char或者varchar,今天想总结一下它们两者的区别 1. char长度是不可变的 varchar的长度是可变的 2....
  • 在建立表的时候,给一个String类型的数据定义一个数据库数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下两者的区别。   1. char长度是不可...
  • amp;tid=1780983&ordertype=1用Rtrim()select * from OPENQUERY(MYSQLAPP,'select rtrim(char_col),........ from uc.test');或者DBCC TRACEON (8765) WITH NO_INF...
  • 直奔主题,例如表字段如下: create table test_tab( type char(3) ) 如果我们在前端传值,type给的值为"1",那么保存在数据库中此条记录type的值为"1 " 多出两个长度的空格 ...
  • MySQL数据库中varchar与char类型的区别

    千次阅读 多人点赞 2018-09-25 16:25:21
    MySQL数据库中varchar与char类型的区别 在数据库中建表时,需要给数据定义一个数据库中的数据库类型,当需要给String类型定义一个数据库中的类型时,可以看见有两个选择,一个是varchar,另一个是char,有很多人不...
  • 数据库char类型和varchar类型的区别

    千次阅读 2010-07-06 16:05:00
    varchar是可变长度 char是固定长度 区别主要体现在取记录数据时的长度 VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。...
  • 在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char.。这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是 从数据的保存方式来看,两者相差很大。而且其具体的实现方式,还依赖与存储引擎。我...
  • 长度 【char】是定长,长度不足空格【后补齐】。适合固定长度字段和频繁变更的字端。相比varchar要计算长度,char要省... 如果是utf8编码方式, 那么char类型占255 * 3个字节。(utf8下一个字符占用1至3个字节) 【var.
  • char[]:固定长度字符串,用来存储数组类型的数据,pgadmin中无法修改此类型长度,默认长度为1. character:固定长度字符串,pgadmin中可以修改此类型长度 character[]:固定长度字符串,用来存储数组类型的数据...
  • 在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天明确一下两者的区别。 (1)char长度是不可变的,而...
  • MySQL数据库char与varchar区别

    万次阅读 2016-08-25 17:10:15
    ① VARCHAR与CHAR字符型数据的差异字符串数据类型 MySQL数据类型 含义 char(n) 固定长度,最多255个字符 varchar(n) 可变长度,最多65535个字符 tinytext 可变长度,最多255个字符

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,238
精华内容 895
关键字:

数据库char类型长度