精华内容
下载资源
问答
  • 举个例子,假如一张表上有两列,分别是 CHAR (20) 和 VARCHAR (20),我们插入一个字符串 “abcd”,在数据库中存储时, CHAR 会使用全部的 20 个字符 的长度,不足的部分用空格填充,而 VARCHAR 仅仅就只使用 4 个...

    1、VARCHAR (50) 中的 50 到底是能存 50 个字还是50 个字节

    mysql root@(none):imooc_mysql_interview> create varchar_test(clo_1 varchar(8));
    mysql root@(none):imooc_mysql_interview> insert into varchar_test values("123456789")
    (1406, "Data too long for column 'clo_1' at row 1")
    mysql root@(none):imooc_mysql_interview> insert into varchar_test values("12345678")
    Query OK, 1 row affected
    Time: 0.006s
    mysql root@(none):imooc_mysql_interview> insert into varchar_test values("数一数是不是八个");
    Query OK, 1 row affected
    Time: 0.005s
    

    从上述实验的结果可知,显然是能存 8 个字符而不是 8 个字节,也就是说 VARCHAR 的括号中的数字代表的是字符。

    2、CHAR (50) 和 VARCHAR (50) 有什么区别?

    首先要说明的一点, CHAR 和 VARCHAR 在存储方式上存在着差异: CHAR是定长字符, MySQL 数据库会根据建表时定义的长度给它分配相应的存储空间。
    而 VARCHAR 是可变长度字符的数据类型,在存储时只使用必要的空间。

    举个例子,假如一张表上有两列,分别是 CHAR (20) 和 VARCHAR (20),我们插入一个字符串 “abcd”,在数据库中存储时, CHAR 会使用全部的 20 个字符
    的长度,不足的部分用空格填充,而 VARCHAR 仅仅就只使用 4 个字符的长度。

    其次,由于 CHAR 数据类型的这个特性,在将数据写入表中时, 如果字符串尾部存在空格,会被自动删除,而 VARCHAR 数据类型会保留这个空格。在一些
    特殊场景中要注意这个问题。所以推荐你使用 CHAR 数据类型存储一些固定长度的字符串,比如身份证号、手机号、性别等。

    最后, CHAR 和 VARCHAR 的存储长度不同。 CHAR 数据类型可定义的最大长度是 255 个字符,而 VARCHAR 根据所使用的字符集不同,最大可以使用65535 个字节

    mysql root@(none):imooc_mysql_interview> alter table varchar_test add col_2 char(256) NULL DEFAULT '';
    You're about to run a destructive command.
    Do you want to proceed? (y/n): y
    Your call!
    (1074, "Column length too big for column 'col_2' (max = 255); use BLOB or TEXT instead")
    mysql root@(none):imooc_mysql_interview> alter table varchar_test add col_2 varchar(65535) NULL DEFAULT '';
    You're about to run a destructive command.
    Do you want to proceed? (y/n): y
    Your call!
    (1074, "Column length too big for column 'col_2' (max = 16383); use BLOB or TEXT instead")
    

    可以看出,char数据类型可定义的最大长度是 255 个字符。超过255系统会提示错误。varchar数据类型最大可以使用65535 个字节,常用中文字符用utf-8编码占用3个字节(大约2万多字),但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字),65535/4=16383

    3、VARCHAR 数据类型优化

    虽然使用 VARCHAR (50) 和 VARCHAR (1000) 存储‘abcd’的存储空间开销是一样的,但是当你在读取数据时,把这些数据读取到内存的过程中, MySQL 数
    据库需要分配相应大小的内存空间来存放数据。

    所以更大的 VARCHAR 列在读取时要使用更大的内存空间,即使它实际上只存储了一丁点数据。并且在操作这个表的过程中,如果遇到一些聚合(GROUP BY)或排序(ORDERBY)的操作,需要调用内存临时表或磁盘临时表时,性能会更加糟糕。

    因此, 在保留一定冗余的前提下,只给 VARCHAR 分配恰到好处的空间使用

    4、INT、 INT (1)、和 INT (20)

    INT 定义中的数字只是表示显示宽度,它并不限制 MySQL 的实际存储空间。因此在开发工作中不要把 INT (1) 当初 TINYINT 来用,也千万不要把 INT (20)
    当成 BIGINT 用。

    对于 UNSIGNED 这个属性,最适合的场景就是主键自增值,或者一些不允许出现负数的应用中。在使用时要注意带有 UNSIGNED 的字段,在做计算时如果出
    现负数可能会报错

    展开全文
  • 数据库用的oracle,有两张表,一个是用户表,里面有一个部门编号字段类型char[12],一个是关联表可通过部门编号查找到部门名称。本想通过先读取出部门编号再查找到部门名称,但读出的数据只有一位,正确的应该是12...

    情景描述:给一个公司修改他们做的系统门户。需要通过用户id读取用户所属部门名称。数据库用的oracle,有两张表,一个是用户表,里面有一个部门编号字段类型为char[12],一个是关联表可通过部门编号查找到部门名称。本想通过先读取出部门编号再查找到部门名称,但读出的数据只有一位,正确的应该是12位。
    读取方法:
    String sql_ssbm = "select DWDM from yhb where yhm='"+username+"' "; 
    Session s_ssbm = HibernateUtilsys.getSession();//直接用hibernate操作数据库,没有和其他框架结合,HibernateUtilsys是从sessionFactory取出一个session对象。 
    List list_ssbm = s_ssbm.createSQLQuery(sql_ssbm).list(); 
    s_ssbm.close(); 
    if(list_ssbm!=null && list_ssbm.size() > 0){ 
    ssbm = (String)list_ssbm.get(0); 
    }

    报错,说明list_ssbm.get(0)不是String,换成list_ssbm.get(0).toString()仅可获得编号的首位字符6。

    if(name instanceof String){
    System.out.println(name+" is String");
    }
    System.out.println(""+name.getClass());

    查看list_ssbm.get(0)的数据类型,为 java.lang.Character。但getClass()的方法说明:“返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。 ”因此这个类型可能不是真实类型,甚至猜想是否和struts2--数据类型转换 有关,但这里并没用struts,希望大家能帮我找出真正的原因。

    解决办法:其实不是真正的解决办法,仅仅是拼sql语句,用多表查询,不直接读出所属单位编码。

    String sql_ssbm = "select ZDZ from ZDDMB t where zddm=(select DWDM from yhb where yhm='"+username+"' ) and zdbh='1' ";

    转载于:https://www.cnblogs.com/wanping/archive/2012/12/14/2817784.html

    展开全文
  • 注:sex字段char类型 select * from user where a.sex=1。不走索引 select * from user where a.sex='1'。走索引 所以当类型char类型时候不能少引号。

    注:sex字段为char类型

    select * from user where a.sex=1。不走索引

     

    select * from user where a.sex='1'。走索引

     

    所以当类型为char类型时候不能少引号。

     

    展开全文
  • 直奔主题,例如表字段如下: create table test_tab( type char(3) ) 如果我们在前端传值,type给的值为"1",那么保存在数据库中此条记录type的值为"1 " 多出两个长度的空格 ...

    直奔主题,例如表字段如下:

     create table test_tab(

       type char(3)

    )

    如果我们在前端传值,type给的值为"1",那么保存在数据库中此条记录type的值为"1  " 多出两个长度的空格

    展开全文
  • 今天做项目的时候,遇到一个问题,Hibernate取得数据库集合,然后转换成数组,其中字段类型char的值,取值的时候只取第一位;百度了N多个方法,如to_char(),to_varchar,convert都不行,后来无意中看到一个帖子,...
  • char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。...
  • 关于效率方面的解释: char 比如 sname 每次都分配好四个空间,不需要计算来的数据的长度,varchar就需要计算每次来数据的长度。
  • createSQLQuery 查询数据库类型char字段时 通过hibernate的createSQLQuery来查询某几个字段,如id,number,name等,结果发现一个很奇怪的现象,id字段只拿到一个字符,而其他字段正常。 id在数据库中是CHAR(32)...
  • ORACLE常用数据库字段类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度...
  • 数据库字段类型说明

    千次阅读 2018-03-23 10:08:29
    数据库字段的常见类型一般包括: char varchar text nchar nvarchar datetime samlldatetime int bit decimal numeric float 当然还有一些不常用到的字段类型ntext bignit smallint tinyint real(1) char、...
  • 数据库字段类型对应C#字段类型

    千次阅读 2012-11-30 10:43:11
    数据库类型 C#类型 char,nchar char varchar,nvarchar,text,ntext string bit boolean datetime,smalldatetime datetime decimal ...
  • SQL Server数据库字段类型说明 目前Sql Server数据库一共有X个字段类型,大体分为9类,分别是字符串类型、二进制码字符串数据类型、Unincode字符串数据、整数类型、精确数据类型、近似值浮点数值数据类型、日期时间...
  • ORACLE数据库字段类型说明

    千次阅读 2018-04-03 17:08:36
    ORACLE数据库字段类型说明 目前Oracle 数据库大概有26个字段类型,大体分为六类,分别是字符串类型、数字数据类型、日期时间数据类型、大型对象(LOB)数据类型、RAW和LONG RAW数据类型、ROWID和UROWID数据...
  • 数据库字段类型

    2020-09-28 13:54:36
    太长时间没有操作数据库,收集了部分有用的资料。 一、创建数据表 CREATE TABLE mytable ( id VARCHAR(4) NOT NULL, name VARCHAR(10), sex CHAR(1), createtime DATE, age INTEGER, oid VARCHAR(4), ...
  • 常用数据库字段类型

    千次阅读 2011-11-02 15:53:05
    常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 bytes可做索引的最大长度749 NCHAR 根据字符集而定的固定...
  • 数据库字段类型解释

    2021-05-14 14:11:32
    不固定长度、不频繁更新用varchar,反之用char。 频繁更新由于varchar每次都要检查长度,会造成数据碎片影响效率 如何存储日期 data类型 只精确到年月日,用来保存生日 # time 只保存时分秒,感觉用处不多 ...
  • CHAR,VARCHAR,NVARCHAR,数据库字段类型

    千次阅读 2013-09-24 13:16:46
    CHAR,VARCHAR,VARCHAR2类型的区别与使用 区别:  1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的...
  • java读取数据库char类型字段问题

    千次阅读 2015-03-05 17:35:20
    读取数据库char类型字段,只要char(>1),java取出数据只是第一个字符。...字段类型char(2) 例如字段值:01 读取出来为:0 hibernate配置文件 #hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate
  • 分 类 数据类型 说 明 二进制数据类型 存储非字符和文本的... char 固定长度的非 Unicode 字符数据 varchar 可变长度非 Unicode 数据 ...
  • CHAR 固定长度字符串 最大长度2000bytes VARCHAR2 可变长度的字符串 最大长度4000bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000bytes NVARCHAR2 根据字符集而定的可变...
  • oracle 的char 类型字段,在数据库中是固定长度的,而varchar2类型的是长度是可以变化的。假设某个字段类型char(20),这时将‘abc’保存到这个字段后,其实在数据库中保存的字符仍然是20字节,另外有17个字节是...
  • MySQL数据库字段类型

    2011-06-01 14:17:00
    字段类型中文说明限制条件其它说明CHAR固定长度字符串最大长度2000 bytes VARCHAR2可变长度的字符串最大长度4000 bytes可做索引的最大长度749NCHAR根据字符集而定的固定长度字符串最大长度2000 bytes NVARCHAR2...
  • 目前Sql Server数据库一共有X个字段类型,大体分为9类,分别是字符串类型、二进制码字符串数据类型、Unincode字符串数据、整数类型、精确数据类型、近似值浮点数值数据类型、日期时间数据类型、货币数据类型、特殊...

空空如也

空空如也

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

数据库字段类型char