精华内容
下载资源
问答
  • 常用的字符数据类型
    千次阅读
    2022-06-29 15:39:08

    引言

    Oracle 数据库内置的数据类型可分为6类:字符类型、数值类型、日期类型、 LOB 类型、二进制类型和行类型


    1.字符类型

    CHAR [( size [ BYTE[CHAR ])]:用于存储固定长度的字符串。参数 size 规定了字符串的最大长度,可选关键字 BYTE 或 CHAR 表示其长度单位是字节或字符,默认值为1B,允许最大长度为2000B。如果 CHAR 类型的列中实际保存的字符串长度小于指定的 size 大小, Oracle 将自动使用空格填满。

    VARCHAR2( size [ BYTE I CHAR ]):用于存储可变长度的字符串。参数size 规定了字符串的最大长度,可选关键字 BYTE 或 CHAR 表示其长度单位是字节或字符,默认单位为 BYTE ,允许字符串的最大长度为4000B。与 CHAR 类型不同,当VARCHAR2类型的列中实际保存的字符串长度小于 size 时,将按字符串实际长度分配空间。

    NCHAR [( size )]:用于存储多字节编码( UNICODE )的定长字符串。参数 size 指定了字符串的最大字符数。如果字符采用AL16UTF16编码,存储容量可以提高2倍,如果采用UTF8编码,存储容量可以提高3倍。 size 的取值最大为2000B,默认为1。。NVARCHAR2( size ):用于存储多字节编码( UNIcoDE )的变长字符串。参数 size 指定了学符串的最大字符数,最大为4000B。

    LONG :用于存储变长字符串,最大长度为2GB。这是为了与早期版本兼容而保留的字符类型。


    2.数值类型

    NUMBERL ( pL , S ]:可以存储0、正数和负数,数值的绝对值为10-o~10。 NUMBER 类型数据占用1~22B的存储空间。 p 表示数值的总位数(精度),默认值为38; s 表示刻度,取值为一84~127, s 为正数时表示保留小数的位数, s 为负数时表示对小数点左侧 s 位进行舍人,默认值为0。


    3.日期类型

    DATE:用于存储日期和时间。可以存储的日期范围为公元前4712年1月1日到公元后9999年12月31日,占据7B的空间,由世纪、年、月、日、时、分、秒组成。. TIMESTAMPL ( p )]:表示时间戳,是 DATE 数据类型的扩展,允许存储小数形式的秒值。 p 表示秒的小数位数,取值范围为0~9,默认值为6。根据 p 值的设置不同, TIMESTAMP 类型数据占据7~11B空间,由世纪、年、月、日、时、分、秒组成,如30-MAY-1207.56.07.544000PM。


    4. LOB 类型

    CLOB:用于存储单字节或多字节的大型字符串对象,支持使用数据库字符集的定长或变长字符。在 Oracle 12c中 CLOB 类型最大存储容量为128TB。
    BLOB:用于存储大型的、未被结构化的变长的二进制数据,如二进制文件、图片文件、音频和视频等非文本文件。在 Oracle 12c中 BLOB 类型最大存储容量为128TB。
    BFILE:用于存储指向二进制格式文件的定位器,该二进制文件保存在数据库外部的操作系统中。在 Oracle 12c中 BFILE 文件最大容量为128TB,不能通过数据库操作修改 BFILE 定位器所指向的文件。


    5.二进制类型

    ROW ( size ):用于存储变长的二进制数据, size 表示数据长度,取值范围为1~2000B。
    LONG ROW :用于存储变长的二进制数据,最大存储数据量为2GB。 Oracle 建议使用 BLOB 类型代替 LONG RAW 类型。


    6.行类型

    ROWID :行标识符,表示表中行的物理地址的伪劣类型。 ROWID 类型数据由18位十六进制数构成,其中1-6位表示对象编号,7-8位表示文件编号,9-15位表示数据块编号,16-18位表示数据块内编号。

    更多相关内容
  • MySQL的10种常用数据类型

    千次阅读 2022-04-29 14:51:38
    常用数据类型有: 整型(xxxint) 位类型(bit) 浮点型(float和double、real) 定点数(decimal,numeric) 日期时间类型(date,time,datetime,year) 字符串(char,varchar,xxxtext) 二进制数据(xxxBlob...

    MySQL的数据类型

    常用的数据类型有:

    • 整型(xxxint)
    • 位类型(bit)
    • 浮点型(float和double、real)
    • 定点数(decimal,numeric)
    • 日期时间类型(date,time,datetime,year)
    • 字符串(char,varchar,xxxtext)
    • 二进制数据(xxxBlob、xxbinary)
    • 枚举(enum)
    •  集合(set)

    1、整数(xxxint)

    整数列的可选属性有三个:

    • M: 宽度(在0填充的时候才有意义,否则不需要指定)
    • unsigned: 无符号类型(非负)
    • zerofill: 0填充,(如果某列是zerofill,那么默认就是无符号),如果指定了zerofill只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可

    原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 bytes 的存储空间。

    2、浮点型

    对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节

    MySQL允许使用非标准语法(其他数据库未必支持,因此如果设计到数据迁移,则最好不要这么用):FLOAT(M,D)或DOUBLE(M,D)。这里,(M,D)表示该值一共显示M位,其中D表示小数点后几位,M和D又称为精度和标度。例如,定义为FLOAT(5,2)的一个列可以显示为-999.99-999.99。M取值范围为0~255。D取值范围为0~30,同时必须<=M。

    如果存储时,整数部分超出了范围(如上面的例子中,添加数值为1000.01),MySql就会报错,不允许存这样的值。如果存储时,小数点部分若超出范围,就分以下情况:若四舍五入后,整数部分没有超出范围,则只警告,但能成功操作并四舍五入删除多余的小数位后保存,例如在FLOAT(5,2)列内插入999.009,近似结果是999.01。若四舍五入后,整数部分超出范围,则MySql报错,并拒绝处理。如999.995和-999.995都会报错。

    说明:小数类型,也可以加unsigned,但是不会改变数据范围,例如:float(3,2) unsigned仍然只能表示0-9.99的范围。

    float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示

    REAL就是DOUBLE ,如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。

    注意:在编程中,如果用到浮点数,要特别注意误差问题,因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。如果希望保证值比较准确,推荐使用定点数据类型。

    3、位类型(了解)

    BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。

    BIT其实就是存入二进制的值,类似010110。如果存入一个BIT类型的值,位数少于M值,则左补0。如果存入一个BIT类型的值,位数多于M值,MySQL的操作取决于此时有效的SQL模式:如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。

    对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()或hex()函数进行读取。

    4、定点型

    DECIMAL在MySQL内部以字符串形式存放,比浮点数更精确。定点类型占M+2个字节

    DECIMAL(M,D)与浮点型一样处理规则。M的取值范围为0~65,D的取值范围为0~30,而且必须<=M,超出范围会报错。

    DECIMAL如果指定精度时,默认的整数位是10,默认的小数位为0。

    NUMERIC等价于DECIMAL。

    5、日期时间类型

    对于year类型,输入的是两位,“00-68”表示2000-2069年,“70-99”表示1970-1999年。记得比较麻烦,建议使用4位标准格式。

    'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS','YYYY-MM-DD'或'YY-MM-DD'格式的字符串。允许“不严格”语法:任何标点符都可以用做日期部分或时间部分之间的间隔符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等价的。

    'YYYYMMDD'或'YYMMDD'格式的没有间割符的字符串,假定字符串对于日期类型是有意义的。例如,'19970523'和'970523'被解释为 '1997-05-23',但'971332'是不合法的(它有一个没有意义的月和日部分),将变为'0000-00-00'。

    对于包括日期部分间隔符的字符串值,如果日和月的值小于10,不需要指定两位数。'1979-6-9'与'1979-06-09'是相同的。同样,对于包括时间部分间隔符的字符串值,如果时、分和秒的值小于10,不需要指定两位数。'1979-10-30 1:2:3'与'1979-10-30 01:02:03'相同。

    数字值应为6、8、12或者14位长。如果一个数值是8或14位长,则假定为YYYYMMDD或YYYYMMDDHHMMSS格式,前4位数表示年。如果数字 是6或12位长,则假定为YYMMDD或YYMMDDHHMMSS格式,前2位数表示年。其它数字被解释为仿佛用零填充到了最近的长度。

    一般存注册时间、商品发布时间等,不建议使用datetime存储,而是使用时间戳,因为datetime虽然直观,但不便于计算。而且timestamp还有一个重要特点,就是和时区有关。

    6、字符串型

    char,varchar,text区别

    char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

    char如果不指定(M)则表示长度默认是1个字符。varchar必须指定(M)。

    char(M)类型的数据列里,每个值都占用M个字符,如果某个长度小于M,MySQL就会在它的右边用空格字符补足(在检索操作中那些填补出来的空格字符将被去掉;如果存入时右边本身就带空格,检索时也会被去掉);在varchar(M)类型的数据列里,每个值只占用刚好够用的字符再加上一个到两个用来记录其长度的字节(即总长度为L字符+1/2字字节)。[I1]

    由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但相对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。

    text文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用char,varchar来代替。还有text类型不用加默认值,加了也没用。

    哪些情况使用char更好

    一,存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。

    二,固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。

    三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。

    MyISAM和MEMORY存储引擎中无论使用char还是varchar其实都是作为char类型处理的。

    除此之外,建议使用varchar类型。特别是InnoDB存储引擎。

    7、二进制值类型(了解)

    包括:xxxBLOB和xxxBINARY

    BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,但是不同的是,它们存储的不是字符字符串,而是二进制串。所以它们没有字符集,并且排序和比较基于列值字节的数值值。当保存BINARY(M)值时,在它们右边填充0x00(零字节)值以达到指定长度。取值时不删除尾部的字节。比较时所有字节很重要(因为空格和0x00是不同的,0x00<空格),包括ORDER BY和DISTINCT操作。比如插入'a '会变成'a \0'。

    BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。分别与四种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应有相同的最大长度和存储需求。在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。BLOB和TEXT列不能有默认值。BLOB或TEXT对象的最大大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。你可以通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。

    8、枚举(ENUM)

    MySql中的ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值:

    可以插入空字符串""和NULL(如果运行NULL的话)。

    如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),如果是严格模式,将不能插入,如果是非严格模式,将选用第一个元素代替,并警告。

    ENUM最多可以有65,535个成员,需要2个字节存储。

    当创建表时,ENUM成员值的尾部空格将自动被删除。

    值的索引规则如下:

    来自列规定的允许的值列中的值从1开始编号。

    空字符串错误值的索引值是0。

    NULL值的索引是NULL。

    9、集合(SET)

    SET和ENUM类型非常类似,也是一个字符串对象,里面包含0~64个成员。

    SET和ENUM存储上有所不同,SET是根据成员的个数决定存储的字节数。

    SET和ENUM最主要的区别在于SET类型一次可以选择多个成员,而ENUM则只能选择一个。

    10、特殊的NULL类型

    Null类型特征:

    (1)所有的类型的值都可以是null,包括int、float等数据类型

    (2)空字符串””,不等于null,0也不等于null,false也不等于null

    (3)任何运算符,判断符碰到NULL,都得NULL

    (4)NULL的判断只能用is null,is not null

    (5)NULL 影响查询速度,一般避免使值为NULL

    面试:

    为什么建表时,加not null default '' / default 0

    答:不想让表中出现null值.

    为什么不想要的null的值

    答:(1)不好比较,null是一种类型,比较时,只能用专门的is null 和 is not null来比较.

    碰到运算符,一律返回null

    (2)效率不高,影响提高索引效果.

    因此,我们往往,在建表时 not null default ''/0

    (4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;5.0版本以上,varchar(20),指的是20字符)

    展开全文
  • 数据类型-字符

    千次阅读 2020-02-04 23:12:53
    字符串是 Python中的一种基本数据类型。 它是一个字符序列,并且字符只有在组成这个序列时才有意义。 很多商业应用中都有字符串类型的数据,比如供应商和客户的名字及地址、评价和反馈数据、事件日志和文档记录。...

    字符串是 Python中的一种基本数据类型。 它是一个字符序列,并且字符只有在组成这个序列时才有意义。 很多商业应用中都有字符串类型的数据,比如供应商和客户的名字及地址、评价和反馈数据、事件日志和文档记录。一些对象看上去是整数,但实际上是字符串,比如邮政编码。邮政编码01234和整数1234是不一样的,文本是不能做加减乘除的。字符串可以包含在单引号、双引号、3个单引号或3个双引号之间。
    **
    Python自带的标准库模块string中包含很多个处理字符串的函数,这里介绍几个最常用的函数。

    1. split:字符拆分函数

    该函数将一个字符串根据某种分隔符拆分为一个列表。

    string1 = 'this is a string'
    string1_list = string1.split() # 默认使用空格进行拆分
    print(string1_list)
    string2 = 'this|is|a|string'
    string2_list = string2.split('|') # 指定根据|作为分隔符拆分
    print(string2_list)
    

    以上代码输出的结果string1_list和string2_list是一样的,都是

    ['this','is','a','string']
    

    **

    2. join:合并一个列表为字符串

    该函数功能与split正好相反,它是根据某个分隔符将列表拼接成一个字符串

    print(','.join(string2_list))
    

    join 函数将列表中的元素组合成一个字符串,各个元素之间用逗号连接起来。所以新生成的字符串为:

    this,is,a,string
    

    3. strip:去除字符串两端不想要字符

    strip函数默认删除字符串两端的空格、换行符(\n)和制表符(\t)。lstrip和rstrip函数相应地删除字符串左侧和右侧的空格、换行符(\n)和制表符(\t)。

    • strip:删除字符串两端的空格、换行符(\n)和制表符(\t)
    • lstrip:删除字符串左侧的空格、换行符(\n)和制表符(\t)
    • rstrip:删除字符串右侧的空格、换行符(\n)和制表符(\t)

    默认是删除空格、换行符(\n)和制表符(\t),当然也可以指定要删除的字符,如:

    s1 = '$this is a string starts with dollar'
    print(s1.strip('$')
    

    输出结果为:

    this is a string starts with dollar
    

    4. replace:将字符串中的一个或一组字符替换为另一个或另一组字符

    这个函数有两个参数,第一个参数是要在字符串中替换的字符或一组字符,第二个参数是要用来替换掉第一个参数的字符或一组字符。即s1.replace(要替换的内容,替换为xxx)

    如:

    print(s1.replace('$','dollar ') # 注意是替换为dollar空格
    

    输出的结果为:

    dollar this is a string starts with dollar
    

    可以看出将其中的「$」替换为「dollar 」。

    5. lower、upper、capitalize

    • lower:将英文字母转换为小写
    • upper:将英文字母转换为大写
    • capitalize:将字符串转换为首字母大写,其余部分小写。注意这里是对整个字符串,而不是每一个单词。

    如:

    s1 = 'thiS IS a sTring'
    print(s1.lower())
    print(s1.upper())
    print(s1.capitalize())
    

    输出结果为:

    this is a string
    THIS IS A STRING
    This is a string
    

    如果我们想要输出每一个单词的首字母大写,就要使用一个循环来每次传入一个单词了

    words = []
    for word in s1.split():
        words.append(word.capitalize())
    print(' '.join(words))
    

    输出结果为:

    This Is A String
    
    展开全文
  • redis常用五大数据类型

    千次阅读 2022-06-12 07:19:25
    Redis字符串(String) ...String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M 常用命令set 添加键值对*NX:当数据库中key不存在时,可以将key-value添加数据库*XX:当数据库中key...

    Redis键(key)

    keys *查看当前库所有key (匹配:keys *1)
    
    exists key判断某个key是否存在
    
    type key 查看你的key是什么类型
    
    del key 删除指定的key数据
    
    unlink key 根据value选择非阻塞删除
    
    仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
    
    expire key 10 10秒钟:为给定的key设置过期时间
    
    ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
    
    
    
    select命令切换数据库
    
    dbsize查看当前数据库的key的数量
    
    flushdb清空当前库
    
    flushall通杀全部库

    Redis字符串(String)

    简介

    String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

    String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

    String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

     常用命令

    set   <key><value>添加键值对

    *NX:当数据库中key不存在时,可以将key-value添加数据库

    *XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥

    *EX:key的超时秒数

    *PX:key的超时毫秒数,与EX互斥

    get   <key>查询对应键值
    append  <key><value>将给定的<value> 追加到原值的末尾
    strlen  <key>获得值的长度
    setnx  <key><value>只有在 key 不存在时    设置 key 的值
    
    incr  <key>
    将 key 中储存的数字值增1
    只能对数字值操作,如果为空,新增值为1
    decr  <key>
    将 key 中储存的数字值减1
    只能对数字值操作,如果为空,新增值为-1
    incrby / decrby  <key><步长>将 key 中储存的数字值增减。自定义步长
    getrange  <key><起始位置><结束位置>
    获得值的范围,类似java中的substring,前包,后包
    setrange  <key><起始位置><value>
    用 <value>  覆写<key>所储存的字符串值,从<起始位置>开始(索引从0开始)。
    
    setex  <key><过期时间><value>
    设置键值的同时,设置过期时间,单位秒。
    getset <key><value>
    以新换旧,设置了新值同时获得旧值。

    数据结构

    String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.

     如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

     Redis列表(List) 

    简介

    单键多值

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

    它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

     

    常用命令

    lpush/rpush  <key><value1><value2><value3> .... 从左边/右边插入一个或多个值。
    lpop/rpop  <key>从左边/右边吐出一个值。值在键在,值光键亡。
    
    rpoplpush  <key1><key2>从<key1>列表右边吐出一个值,插到<key2>列表左边。
    
    lrange <key><start><stop>
    按照索引下标获得元素(从左到右)
    lrange mylist 0 -1   0左边第一个,-1右边第一个,(0-1表示获取所有)
    lindex <key><index>按照索引下标获得元素(从左到右)
    llen <key>获得列表长度 
    
    linsert <key>  before <value><newvalue>在<value>的后面插入<newvalue>插入值
    lrem <key><n><value>从左边删除n个value(从左到右)
    lset<key><index><value>将列表key下标为index的值替换成value

     数据结构

    List的数据结构为快速链表quickList。

    首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。

    它将所有的元素紧挨着一起存储,分配的是一块连续的内存。

    当数据量比较多的时候才会改成quicklist。

    因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。

     

     Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

     Redis集合(Set)

    简介

    Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

    Redis的Set是string类型的无序集合它底层其实是一个value为nullhash,所以添加,删除,查找的复杂度都是O(1)

    hash函数就是根据key计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表

    一个算法,随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变

     常用命令

    sadd <key><value1><value2> ..... 
    将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
    smembers <key>取出该集合的所有值。
    sismember <key><value>判断集合<key>是否为含有该<value>值,有1,没有0
    scard<key>返回该集合的元素个数。
    srem <key><value1><value2> .... 删除集合中的某个元素。
    spop <key>随机从该集合中吐出一个值。
    srandmember <key><n>随机从该集合中取出n个值。不会从集合中删除 。
    smove <source><destination>value把集合中一个值从一个集合移动到另一个集合
    sinter <key1><key2>返回两个集合的交集元素。
    sunion <key1><key2>返回两个集合的并集元素。
    sdiff <key1><key2>返回两个集合的差集元素(key1中的,不包含key2中的)

    数据结构

    Set数据结构是dict字典,字典是用哈希表实现的

    Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。

     Redis哈希(Hash)

    简介

    Redis hash 是一个键值对集合

    Redis hash是一个string类型的fieldvalue的映射表,hash特别适合用于存储对象。

    类似Java里面的Map<String,Object>

    用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储

    每次修改用户的某个属性需要,先反序列化改好后再序列化回去。开销较大。

    用户ID数据冗余 

     

     通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题

    常用命令

    hset <key><field><value>给<key>集合中的  <field>键赋值<value>
    hget <key1><field>从<key1>集合<field>取出 value 
    hmset <key1><field1><value1><field2><value2>... 批量设置hash的值
    hexists<key1><field>查看哈希表 key 中,给定域 field 是否存在。 
    hkeys <key>列出该hash集合的所有field
    hvals <key>列出该hash集合的所有value
    hincrby <key><field><increment>为哈希表 key 中的域 field 的值加上增量 1   -1
    hsetnx <key><field><value>将哈希表 key 中的域 field 的值设置为 value ,
                              当且仅当域 field 不存在 .
    

    数据结构

    Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

    Redis有序集合Zset(sorted set)

     简介

    Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

    不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

    因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

    访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

    常用命令

    zadd  <key><score1><value1><score2><value2>…
    将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
    zrange <key><start><stop>  [WITHSCORES]   
    返回有序集 key 中,下标在<start><stop>之间的元素
    带WITHSCORES,可以让分数一起和值返回到结果集。
    zrangebyscore key minmax [withscores] [limit offset count]
    返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
    有序集成员按 score 值递增(从小到大)次序排列。 
    zrevrangebyscore key maxmin [withscores] [limit offset count]               
    同上,改为从大到小排列。 
    zincrby <key><increment><value>      为元素的score加上增量
    zrem  <key><value>删除该集合下,指定值的元素 
    zcount <key><min><max>统计该集合,分数区间内的元素个数 
    zrank <key><value>返回该值在集合中的排名,从0开始。
    
    

    案例:如何利用zset实现一个文章访问量的排行榜? 

    数据结构

    SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

    zset底层使用了两个数据结构

    (1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

    (2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表

    展开全文
  • SQL SERVER(6)字符数据类型

    千次阅读 2020-04-24 21:16:07
    字符型数据是数据库中最常用数据类型之一,有时人们将其称为字符串。数字、字母、汉字及标点符号都可以称为字符。如果要将字符存放到数据表的字段中,就需要将该字段设置成字符型。 字符型数据被放在单引号(‘’)...
  • SqlServer常用数据类型

    千次阅读 2019-11-28 00:53:02
    SqlServer常用数据类型 一、ASCII字符型 String 类型: Ascll字符型:数据类型包括char、varchar、text   数据类型包括char、varchar、textAscll字符数据是由任何汉字、字母、符号和数字任意组合而成的数据。 ...
  • sqlalchemy 常用数据类型有哪些?

    万次阅读 2018-08-09 16:45:47
     sqlalchemy常用数据类型 数据类型 python数据类型 说明 Integer int 整形 String str 字符串 Float float 浮点型 DECIMAL decimal.Decimal 定...
  • 在JavaScript中如果想将以上的四种基本数据类型转换为字符串类型, 常用的方法有三种 1.对于Number类型和Boolean类型来说, 可以通过 变量名称.toString()的方式来转换 2.可以通过String(常量or变量);转换为字符串 3....
  • 【mysql】文本字符类型

    千次阅读 2022-02-23 22:03:41
    在实际的项目中,经常遇到一种数据,就是字符数据。 MySQL中,文本字符串总体上分为CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET等类型。 1. CHAR与VARCHAR类型 CHAR和VARCHAR类型都可以...
  • MSSQL常用数据类型

    千次阅读 2016-07-22 19:49:27
    1.字符类型 一般常用的varchar,char,text等,其中varchar为可变长,char为定长.varchar使用的好处是可以节约...数据类型 描述 存储空间 char(n) n为1-8000字符之间 n字节 nchar(n) n为1-4000 unicode字符之间
  • Redis五大常用数据类型以及使用场景

    千次阅读 2022-05-02 15:08:08
    我们讨论的数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串 1.string 1).介绍 :string类型是二进制安全的。 虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串...
  • Python设计语言中有一类常用数据类型字符数据类型字符数据类型定义的变量可以使用双引号或单引号将字符括起来,除了字符数据类型,还有其他的数据类型,如整型、布尔型、列表、字典、元组。可以将这些...
  • PostgreSQL的(常用)数据类型

    千次阅读 2021-05-19 08:56:45
    字符类型3. 时间日期4. 布尔类型 1. 数值类型 名称 存储长度 描述 范围 int2 2 bytes small-range integer -32768 to +32767 int4 4 bytes typical choice for integer -2147483648 to +2147483647 int...
  • mysql 常用数据类型

    千次阅读 2021-02-02 03:56:24
    mysql 常用数据类型整型(1) tinyint一个字节 有符号(-128 ~ 127 ) 无符号(unsigned) ( 0 ~ 255 ) 小整数值(2) int四个字节 有符号(-21亿 ~ 21亿 左右 ) 无符号(unsigned) ( 0 ~ 42亿) 大整数值create table t1(id ...
  • redis五大常用数据类型

    千次阅读 2020-08-25 12:18:27
    下面是我总结的五大数据类常用的api,按照使用频率从前往后排列。 1.String类型 String是redis最基本的类型,在redis中,一个key对应一个value。...应用场景:String是最常用的一种数据类型,普通的
  • VB数据类型(一)

    千次阅读 2021-12-10 21:46:23
    VB数据类型介绍
  • MySQL常用数据类型

    千次阅读 2021-01-19 06:54:37
    Mysql的常用数据类型主要有一下四种:串数据类型、数值数据类型、日期和时间数据类型、二进制数据类型。一.串数据类型这是最常用数据类型,有两种基本的串类型:分别为定长串和不定长串。定长串结束长度固定的字符...
  • 常用数据库基本数据类型

    千次阅读 2021-02-08 12:11:18
    数据类型 描述 存储 Text 用于文本或文本与数字的组合 最多 255 个字符。 Memo Memo 用于更大数量的文本。最多存储 65,536 个字符。 注释:无法对 memo 字段进行排序。不过它们是可搜索的。 Byte 允许 0 到 255 的...
  • Oracle数据类型

    千次阅读 2021-04-30 11:24:55
    1、字符类型• CHAR:一个定长字符串,当位数不足自动用空格填充来达到其最大长度。如非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。• VARCHAR2:目前这也是VARCHAR 的同义词。这是一...
  • 1-1: 数据类型字符

    千次阅读 2020-12-06 12:13:23
    一、字符字符数据类型:1.字符串是用双引号""或者单引号""括起来的一个或多个字符。例如:str1 = "哈哈"str2 = "嘿嘿"2.字符串可以保持在变量中,也可以单独存在3.可以用type()函数测试一个字符串的类型type(str...
  • 数据库常用数据类型

    千次阅读 2018-06-08 16:48:55
    数据类型1.整型:bit(布尔型):只能输入true或false,输入1是自动转化为TRUE,0是自动转化为FALSEtinyint:只能输入0到225之间的整数smallint(两个字节组成的整数):-32768~32767int(四个字节组成的整数):2的31...
  • mysql:详解创建表的常用数据类型

    千次阅读 2019-11-09 15:47:39
    1.什么是数据类型 数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。 有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等... ...
  • 三种常用的MySQL 数据类型

    千次阅读 2021-01-28 11:29:46
    MySQL中定义数据字段的类型对你数据库的优化是非常重要的。...这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同...
  • SQL将数据类型分为三类:数值类型,字符串类型和时间日期类型 数值型 数值型数据:都是数值 系统将数值型分为整数型和小数型 整数型 存放整型数据:在SQL中因为要考虑如何节省磁盘空间,所以系统将整型又细分成...
  • 关于STM32串口收发,以及数据类型的任意转换及识别字符命令进行相应赋值。 1 关于STM32串口收发,以及数据类型的任意转换及识别字符命令进行响应赋值。 对于STM32而言,串口这个外设是十分重要的,如果彻底搞懂这个...
  •  介绍elasticsearch的数据类型之前,首先需要了解es映射的概念。  es的存储结构是“index.type.document”形式,而映射就是定义一个document所包含的字段是如何存储、索引的。  即对于elascticsearch数据类型,...
  • Python的基本数据类型一、基本数据类型(1) 数值类型1.1 整形 int1.2 浮点类型 float1.3 complex 复数(2) 字符串类型2.1 字符串基本使用2.2 字符串的切片2.3 字符串拼接2.3.1 最常见的字符串拼接 '+'2.3.2 字符串...
  • GreenPlum常用数据类型

    千次阅读 2019-03-05 22:14:23
    参考《GreenPlum企业应用实战》 1、数值类型: 2、字符类型: 3、时间类型: 转自:https://blog.csdn.net/u010256965/article/details/50508878/
  • mysql的4种常用、重要的数据类型

    万次阅读 2021-01-19 01:11:55
    为了实现这一目标,它需要我们在数据库系统的常用数据类型有充分的认识。下面我们来看一下mysql的重要数据类型1、数值类型可以划分为数值类型:整型,浮点十进制类型。所谓的“十进制”是指decimal和numeric,他们是...
  • Redis常用的五大数据类型

    万次阅读 2022-05-31 15:36:26
    简介 Redis不仅仅支持简单的k/v类型的...Redis支持的五大数据类型包括String(字符串 用法: 键 值),Hash(哈希 类似Java中的 map 用法: 键 键值对),List(列表 用法:键 集合 不可以重复),Set(集合 用法:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 862,955
精华内容 345,182
热门标签
关键字:

常用的字符数据类型