四、数据类型

数据库表由多列字段构成,每个字段指定了不同的数据类型。指定字段的数据类型之后,也就决定了向字段插入的数据内容,例如,当要插入数值的时候,可以将它们存储为整数类型,也可以将它们存储为字符串类型。不同的数据类型也决定了MySQL在存储它们的时候使用的方式,以及在使用它们的时候选择什么运算符号进行运算。

一、MySQL数据类型介绍

MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。
(1)数值类型:包括整数类型TINYINT、SMALLINT、MEDIUM、INT、BIGINT、浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECIMAL。
(2)日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。
(3)字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。字符串类型又分为文本字符串和二进制字符串。

1、整数类型

数值型数据类型主要用来存储数字,MySQL提供了多种数值数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,其所需要的存储空间也会越大。MySQL主要提供的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。
整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。

整数类型说明存储需求
TINYINT很小的整数1字节
SMALLINT小的整数2字节
MEDIUMINT中等大小的整数3字节
INT(INTERGER)普通大小的整数4字节
BIGINT大整数8字节

从表中可以看到,不同类型整数存储所需的字节数是不同的,占用字节数最小的是TINYINT类型,占用字节数最大的是BIGINT类型,相应的占用字节越多的类型所能表示的范围越大。根据占用字节数可以求出每一种数据类型的取值范围。例如,TINYINT需要1字节(8 bits)来存储,那么TINYINT无符号数的最大值为28-1(255)、TINYINT有符号数的最大值为27-1(127)。其他类型的整数的取值范围计算方法相同。

数据类型有符号无符号
TINYINT-128 ~ 1270 ~ 255
SMALLINT- 32768 ~ 327670 ~ 65535
MEDIUMINT- 8388608 ~ 83886070 ~ 16777215
INT(INTEGER)-2147483648 ~ 21474836470 ~ 4294967295
BIGINT-9223372036854775808 ~ 92233720368547758080 ~ 18446744073709551615

看如下语句:

CREATE TABLE tb_emp1
(
	id INT(11),
	name VARCHAR(25),
	deptId INT(11),
	salary FLOAT
);

id字段的数据类型为INT(11),注意后面的数字11,它表示的是改数据类型指定的显示宽度,即能够显示的数值中数字的个数。例如,假设声明一个INT类型的字段:

year INT(4)

该声明指明,在year字段中的数据一般只显示4位数字的宽度。

在这里读者要注意:显示宽度和数据类型的取值范围是无关的。显示宽度只是指明MySQL最大可能显示的数字个数,数值的位数小于指定宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。

其他整数数据类型也可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认的宽度值。

数据类型默认宽度
TINYINT4
SMALLINT6
MEDIUMINT9
INT11
BIGINT20

不同的整数类型有不同的取值范围,并且需要不同的存储空间,因此应该根据实际需要选择合适的类型,这样有利于提高查询的效率和节省存储空间。

2、 浮点数据类型和定点数据类型

MySQL中使用使用浮点数和定点数来表示小数。浮点数类型有两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。定点数类型只有一种:DECIMAL。浮点数类型和定点数类型都可以用(M,N)来表示。其中,M称为精度,表示总共的位数;N称为标度,表示小数的位数。

类型名称说明存储需求
FLOAT单精度浮点数4字节
DOUBLE双精度浮点数8字节
DECIMAL(M,D),DEC压缩的“严格”定点数M+2字节

DECIMAL类型不同于FLOAT和DOUBLE,DECIMAL实际是以串存放的,可能的最大取值范围与DOUBLE一样,但是其有效的取值范围由M和D的值决定。如果改变M而固定D,则其取值范围将随M的变大而变大。

不论是定点数还是浮点数类型,如果用户指定的精度超出精度范围,则会四舍五入。

FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度,DECIMAL若不指定精度则默认为(10,0)。

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;它的确定是会引起精度问题。

在MySQL中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币,科学数据等)使用DECIMAL的类型比较好,另外两个浮点数进行减法和比较运算时容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。

3、日期与时间类型

MySQL中有多种表示日期的数据类型,主要有DATETIME、DATE、TIMESTAMP、TIME和YEAR。例如,当记录年信息的时候,可以只使用YEAR类型,而没有必要使用DATE。每一个类型都有合法的取值范围,当指定确实不合法的值时系统将“零”值插入到数据库中。

类型名称日期格式日期范围存储需求
YEARYYYY1901 ~ 21551字节
TIMEHH:MM:SS-838:59:59 ~ 838:59:593字节
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-313字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC4字节
1、YEAR

YEAR类型是一个单字节类型,用于表示年,在存储时只需要1字节。可以使用各种格式指定YEAR值,如下所示:

(1)以4位字符串或4位数字表示的YEAR,范围为’1901’~‘2155’。输入格式为’YYYY’ 或者YYYY。例如,输入’2010’或2010,插入到数据库的值均为2010.

(2)以2位字符串表示的YEAR,范围为’00’到’99’。‘00’ ~ ‘69’和’70’ ~ '99’范围的值分别被转换为2000 ~ 2069 和 1970~ 1999范围的YEAR值。'0’与‘00’ 的作用相同。插入超过取值范围的值将被转换为2000。
(3)以2位数字表示的YEAR,范围为1 ~ 99。1 ~ 69 和70 ~ 99范围的值分别被转换为2001 ~ 2069 和 1970 ~ 1999 范围的YEAR值。注意:在这里0值将被转换为0000,而不是2000。

两位整数范围与两位字符串范围稍有不同。例如:插入2000年,读者可能会使用数字格式的0表示YEAR,实际上,插入数据库的值为0000,而不是所希望的2000.只有使用字符串格式的’0’或’00’,才可以被正确地解释为2000。非法YEAR值将被转换为0000。

2、TIME

TIME类型用在只需要时间信息的值,在存储时需要3字节,格式为’HH:MM:SS’。其中,HH表示小时,MM表示分钟,SS表示秒。TIME类型的取值范围为-838:59:59,小时部分会如此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可以是某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。可以使用各种格式指定TIME值。

(1)'D HH:MM:SS’格式的字符串。可以使用下面任何一种"非严格"的语法:‘HH:MM:SS’、‘HH:MM’、‘D HH:MM’、‘D HH’或’SS’。这里的D表示日,可以取0 ~ 34之间的值。在插入数据库时,D被转换为小时保存,格式为"D*24+HH"。

(2)'HHMMSS’格式的、没有间隔的字符串或者HHMMSS格式的数值,假定是有意义的时间。例如:‘101112’被理解为’10:11:12’,但’109712’是不合法的(它有一个没有意义的分钟部分),存储时将变为00:00:00。

为TIME列分配简写值时应注意:如果没有冒号,MySQL解释值时,假定最右边的两位表示秒。(MySQL解析TIME值为过去的时间而不是当天的时间。)例如,读者可能认为’1112’和1112表示11:12:00,但MySQL将它们解释为00:11:12(11分12秒)。同样’12’和12被解释为00:00:12。相反,如果TIME值中使用冒号则肯定被看作当天的时间。也就是说,'11:12’表示11:12:00,而不是00:11:12。

创建数据表tmp4,定义数据类型为TIME的字段值t,向表中插入值’10:05:05’,‘23:23’,‘2 10:10’,‘3 02’,‘10’,SQL语句如下:

CREATE TABLE tmp4(t TIME);
INSERT INTO tmp4 values('10:05:05'),('23:23'),('2 10:10'),('3 02'),('10');

在使用 ’D HH‘格式时,小时一定要使用双位数值,如果是小于10的小时数,应在前面加0。

向表tmp4中插入值’101112’、111213、‘0’、107010

INSERT INTO tmp4 values('101112'),(111213),('0');

上面语句可以正常插入。

INSERT INTO tmp4 values (107010);

上面插入会提示数据超出范围,原因是107011的分钟超过了60。

也可以使用系统日期函数向TIME字段列插入值。

INSERT INTO tmp4 values(CURRENT_TIME),(NOW());
3、DATE类型

DATE 类型用在仅需要日期值时,没有时间部分,在存储时需要3字节。日期格式为’YYYY-MM-DD’。其中YYYY表示年,MM表示月,DD表示日。在给DATE类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATE的日期格式即可。

(1)以’YYYY-MM-DD’或者’YYYYMMDD’字符串格式表示的日期,取值范围为’1000-01-01’ ~ ‘9999 -12 -31’。例如,输入’2012-12-31’或者’20121231’,插入数据库的日期都为2012-12-31。

(2)以’YY-MM-dd’或者’YYMMDD’字符串格式表示的日期,在这里YY表示两位的年值。包含两位年值的日期会令人模糊,因为不知道世纪。MySQL使用以下规则解释两位年值:‘00 ~ 69’范围的年值转换为’2000 ~ 2069’;‘70 ~ 99’ 范围的年值转换为’1970 ~ 1999 ‘。例如,输入’12-12-31’,插入数据库的日期为2012-12-31;输入’981231’,插入数据库的日期为1998-12-31。

(3)以YY-MM-DD或者YYMMDD数字格式表示的日期,与前面相似,00~69范围的年值转换为2000 ~ 2069 ,70 ~ 99 范围的年值转换为1970 ~ 1999。例如,输入12-12-31插入数据库的日期为2012-12-31;输入981231,插入数据库的日期为1998-12-31。

(4)使用CURRENT_DATE或者NOW(),插入当前系统日期。

向表中插入系统当前日期:

INSERT INTO tmp5 values(CURRENT_DATE() ),(NOW());

CURRENT_DATE只返回当前日期值,不包括时间部分;NOW()函数返回日期和时间值,在保存到数据库时,只保留了其日期部分。

MySQL允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,’98-11-31‘、’98.11.31‘、’98/11/31‘时等价的,这些值也可以正确地插入到数据库中。

4、DATETIME

DATATIME类型用于需要同时包含日期和时间信息地值,在存储时需要8字节。日期格式为’YYYY-MM-DD HH:MM:SS’。其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分钟,SS表示秒。在给DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATATIME的时间格式即可。

(1) 以’YYYY-MM-DD HH:MM:SS’ 或者 ‘YYYYMMDDHHMMSS’ 字符串格式表示的值,取值范围为’1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59’。

(2)以’YY-MM-DD HH:MM:SS’ 或者 'YYMMDDHHMMSS’字符串格式表示的日期,在这里YY表示两位的年值。与前面相同,‘00 ~ 69’范围的年值转换为’2000 ~ 2069’,‘70 ~ 99’范围的年值转换为’1970 ~ 1999’。
(3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。

5、TIMESTAMP

TIMESTAMP的显示格式与DATATIME相同,显示宽度固定在19个字符,日期格式为YYYY-MM-DD HH:MM:SS,在存储时需要4字节。TIMESTAMP列的取值范围小于DATETIME的取值范围,为’1970-01-01 00:00:01’ UTC ~ ’2038-01-19 03:14:07‘ UTC。其中,UTC为世界标准时间,因此在插入数据时,要保证在合法的取值范围内。

4、文本字符串类型

字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。MySQL支持两类字符串数据:文本字符串和二进制字符串。本小节主要讲解文本字符串类型。文本字符串可以进行区分或者不区分大小写的串比较,还可以进行模式匹配查找。在MySQL中,文本字符串类型是指CHAR、VARCHAR、TEXT、ENUM和SET。

类型名称说明
CHAR(M)固定长度非二进制字符串
VARCHAR(M)可变长度非二进制字符串
TINYTEXT非常小的非二进制字符串
TEXT小的非二进制字符串
MEDIUMTEXT中等大小的非二进制字符串
LONGTEXT大的非二进制字符串
ENUM枚举类型,只能有一个枚举字符串值
SET一个设置,字符串对象可以有零个或多个SET成员

VARCHAR 和 TEXT类型与下一小节讲到的BLOB都是变长类型,其存储需求取决于列值的实际长度,而不是取决与类型的最大可能尺寸。例如,一个VARCHAR(10)列能保存最大长度为10个字符的字符串,实际存储需要是字符串的长度L加上1字节(记录字符串的长度)。对于字符"abcd",L是4而存储要求是5字节。

1、CHAR和VARCHAR类型

CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格,以达到指定的长度。M表示列长度,M的范围时0~255个字符。例如,CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4。当检索到CHAR值时,尾部的空格将被删除。
VARCHAR(M)是长度可变的字符串,M表示最大列长度。M的范围是0~65535。VARCHAR的最大实际长度有最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1。例如,VARCHAR(50)定义了一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的字符串为10个字符和一个字符串结束字符。VARCHAR在值保存和检索时尾部的空格仍然保留。

CHAR(4)定义了固定长度为4的列,不管存入的数据长度为多少,所占用的空间均为4个字节;VARCHAR(4)定义的列所占的字节数为实际长度加1。

如果MySQL运行在“严格”模式下,超过列长度的值不会被保存,并且会出现错误信息。如果使用不严格模式,字符串会被截取插入。

2、TEXT类型

TEXT列保存非二进制字符串。如文章内容、评论等。当保存或查询TEXT列的值时,不删除尾部空格。Text类型分为4种:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。不同的TEXT类型的存储空间和数据长度不同。
(1)TINYTEXT最大长度为255(28-1)字符的TEXT列。
(2)TEXT最大长度为65535(216 -1)字符的TEXT列。
(3)MEDIUMTEXT最大长度为16777215(224-1)字符的TEXT列。
(4)LONGTEXT最大长度为4294967295(232-1)或4GB字符的TEXT列。

3、ENUM类型

ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。语法格式如下:

字段名 ENUM('值1','值2',...,'值n')

其中,“字段名”指将要定义的字段,“值n”指枚举列表中的第n个值。ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。创建的成员中有空格时,其尾部的空格将自动被删除。ENUM值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从1开始编号,MySQL存储的就是这个索引编号。
枚举最多可以有65535个元素。

ENUM值依照索引顺序排列,并且空字符串排在非空字符串前,NULL值排在其他所有的枚举值前。

ENUM列总有一个默认值:如果将ENUM列声明为NULL,NULL值则为该列的一个有效值,并且默认值为NULL;如果ENUM列被声明为NOT NULL,其默认值为允许的值列表的第一个元素。

4、SET类型

SET是一个字符串对象,可以有零或多个值。SET列最多可以有64个成员,其值为表创建时规定的一列值。指定包括多个SET成员的SET列值时,各成员之间用逗号(,)间隔开。语法格式如下:

字段名 SET('值1','值2','值3')

与ENUM类型相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET成员值的尾部空格将被自动删除。与ENUM类型不同的是,ENUM类型的字段只能从定义的列值中选择一个值插入,而SET类型的列可以从定义的列值中选择多个字符的联合。

如果插入SET字段中列值有重复,则MySQL自动删除重复的值;插入SET字段的值的顺序并不重要,MySQL会在存入数据库时按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL将忽视这些值,并给出警告。

5、二进制字符串类型

前面讲解了存储文本的字符串类型,这一小节将讲解MySQL中存储二进制数据的字符串类型。MySQL中的二进制数据类型有BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUNBLOB和LONGBLOB。本节将讲解各类二进制字符串类型的特点和使用方法。

类型名称说明
BIT(M)位字段类型
BINARY固定长度二进制字符串
VARBINARY可变长度二进制字符串
TINYBLOB(M)非常小的BLOB
BLOB(M)小BLOB
MEDUIMBLOB(M)中等大小的BLOB
LONGBLOB非常大的BLOB
1、BIT类型

BIT类型是位字段类型。M表示每个值的位数,范围为1~64。如果被省略,则默认为1。如果为BIT(M)列分配的值的长度小于M位,就在值的左边用0填充。例如,为BIT(6)列分配一个值b’101’,其效果与分配b’000101’相同。BIT数据类型用来保存位字段值。例如,以二进制的形式保存数据13(13的二进制形式为1101),在这里需要至少4位的BIT类型,及可以定义列类型位BIT(4),大于二进制1111的数据是不能插入BIT(4)类型的字段中的。

2、BINARY和VARBINARY类型类型

BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是它们包含二进制字节字符串。其使用的语法格式如下:

列名称 BINARY(M)或者VARBINARY(M)

BINARY类型的长度是固定的,指定长度之后,不足最大长度的,将在它们右边填充’\0’补齐以达到指定长度。例如:指定列数据类型位BINARY(3),当插入’a‘时,存储的内容实际为"a\0\0",当插入"ab"时,实际存储的内容为"ab\0",不管存储的内容是否达到指定的长度,其存储空间均为指定的值M。

VARBINARY类型的长度是可变的,指定好长度之后,其长度可以在0到最大值之间。例如:指定列数据类型为VARBINARY(20),如果插入的值的长度只有10,则实际存储空间为10加1,即实际占用的空间为字符串的实际长度加1。

3、BLOB类型

BLOB是一个二进制大对象,用来存储可变数量的数据。BLOB类型分为4种:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

数据类型存储范围
TINYBLOB最大长度为255(28-1)B
BLOB最大长度为65535(216-1)B
MEDIUMBLOB最大长度为16777215(224-1)B
LONGBLOB最大长度为4294967295(232-1)B

BLOB列存储的是二进制字符串(字节字符串),TEXT列存储的是非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值;TEXT列有一个字符集,并且根据字符集对值进行排序和比较。

二、如何选择数据类型

MySQL提供了大量的数据类型,为了优化存储、提高数据库性能,任何情况下均应使用最精确的类型,即在所有可以表示该列值的类型中,该类型使用的存储最少。

1、整数和浮点数

如果不需要小数,就使用整数来保存数据;如果需要表示小数部分,就使用浮点数类型。对于浮点数,存入的数值会对该列定义的小数位进行四舍五入。例如,假设列的值的范围为1~999999,若使用整数,则MEDIUMINT UNSINGED是最好的类型。若需要存储小数,则使用FLOAT类型。

浮点类型包括FLOAT和DOUBLE类型。DOUBLE类型精度比、FLOAT类型高,因此要求存储精度较高时应选择DOUBLE类型。

2、浮点数和定点数

浮点数FLOAT、DOUBLE相对于定点数DECIMAL的优势是:在长度一定的情况下,浮点数能表示更大的数据范围。由于浮点数容易产生误差,因此对精确度要求比较高时,建议使用DECIMAL来存储。DECIMAL在MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据。在数据迁移中,float(M,D)是非标准SQL定义,数据库迁移可能会出现问题,最好不要这样使用。另外,两个浮点数进行减法和比较运算时也容易出问题,因此在进行计算的时候,一定要小心。进行数值比较时,最好使用DECIMAL类型。

3、日期与时间类型

MySQL对于不同种类的日期和时间有很多数据类型,比如YEAR和TIME。如果只需要记录年份,则使用YEAR类型即可;如果只记录时间,则使用TIME类型。

如果同时需要记录日期和时间,则可以使用TIMESTAMP或者DATETIME类型。由于TIMESTAMP列的取值范围小于DATETIME的取值范围,因此存储范围较大的日期最好使用DATETIME。

TIMESTAMP也有一个DATETIME不具备的属性。默认情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。因此当需要插入记录的同时插入当前时间时,使用TIMESTAMP时方便的。另外,TIMESTAMP在空间上比DATETIME更有效。

4、CHAR与VARCHAR之间的特点与选择

CHAR和VARCHAR的区别如下:

  • CHAR是固定长度字符,VARCHAR是可变长度字符。
  • CHAR会字段删除插入数据的尾部空格,VARCHAR不会删除尾部空格。

CHAR是固定长度,所以它的处理速度比VARCHAR的速度要快,但是它的缺点是浪费存储空间,所以对存储不大但在速度上有要求的可以使用CHAR类型,反之可以使用VARCHAR类型来实现。

存储引擎对于选择CHAR和VARCHAR的影响:

  • 对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。
  • 对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用CHAR不一定比使用VARCHAR更好,但由于VARCHAR是按照实际的长度存储的,比较节省空间,所以对磁盘I/O和数据存储总量比较好。

5、ENUM和SET

ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535个成员。因此,在需要从多个值中选取一个时,可以使用ENUM。因此,在需要从多个值中选择一个时,可以使用ENUM。比如:性别字段适合定义为ENUM类型,每次只能从’男’或’女’中取一个值。

SET可取多值。它的合法取值列表最多允许有64个成员。空字符串也是一个合法的SET值。在需要取多个值的时候,适合使用SET类型,比如要存储一个人的兴趣爱好,最好使用SET类型。

ENUM和SET的值是以字符串形式出现的,但在内部,MySQL是以数值的形式存储它们的。

6、BLOB和TEXT

BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。BLOB主要存储图片、音频信息等,而TEXT只能存储纯文本文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值