一、字符串类型

MySQL 字符串计数 mysql 字符串 长度_数据库


1、CHAR与VARCHAR

char()------定长字符串,最长255个字符。定长会浪费空间
varchar()----变长(不定长)字符串,最长不超过65535个字节,一般超过255个字节,会使用text类型. 不定长节省空间,剩余空间会留给别的数据使用

2、TEXT
TEXT分为4种,与SQLServer不同:

MySQL 字符串计数 mysql 字符串 长度_数据库_02


总结: char、varchar、text都可以表示字符串类型,其区别在于:

(1)char在保存数据时, 如果存入的字符串长度小于指定的长度n,后面会用空格补全。

(2)varchar和text保存数据时, 按数据的真实长度存储, 剩余的空间可以留给别的数据用.

(3)char会造成空间浪费(不足指定长度的会用空格补全), 但是由于不需要计算数据的长度, 因此速度更快。(即浪费空间、节约时间)

(4)varchar和text但是节省了空间, 但是存储的速度不如char快(因为要计算数据的实际长度)

3、ENUM类型

ENUM类型(枚举类型),与C#的概念一样,在定义时指定取值范围。
属性名 ENUM(‘值1’,‘值2’,‘值3’…‘值n’) ENUM有NOT NULL属性,其默认值为取值列表的第一个元素;
 ENUM无NOT NULL,则ENUM类型将允许插入NULL,并且NULL为默认值;CREATE TABLE Test4(Sex ENUM(‘男’,‘女’));
 INSERT INTO Test4 VALUES(‘男’);
 INSERT INTO Test4 VALUES(‘爷’); --这行报错
 SELECT *
 FROM Test4;

4、SET类型

在创建表时,就指定SET类型的取值范围。

属性名 SET(‘值1’,‘值2’,‘值3’…,‘值n’)

  它与ENUM的区别在什么地方呢?

  

MySQL 字符串计数 mysql 字符串 长度_字符串_03

基本上就是多选的ENUM。

二、浮点类型

MySQL 字符串计数 mysql 字符串 长度_java_04

tinyint:占用1个sss字节,相对于java中的byte
 smallint:占用2个字节,相对于java中的short
 int:占用4个字节,相对于java中的int
 bigint:占用8个字节,相对于java中的long
 float:4字节单精度浮点类型,相对于java中的float
 double:8字节双精度浮点类型,相对于java中的double

三、时间和日期类型

MySQL日期时间所有种类如下:

MySQL 字符串计数 mysql 字符串 长度_MySQL 字符串计数_05


MySQL 字符串计数 mysql 字符串 长度_mysql_06


1、date:年月日

2、time:时分秒

3、datetime:年月日 时分秒

4、timestamp:时间戳,与datetime存储相同的数据。

timestamp最大表示2038年,而datetime范围是1000~9999

timestamp在插入数、修改数据时,可以自动更新成系统当前时间

另外TimeStamp类型与DateTime在无输入的情况下要注意下:

TimeStamp使用Current_TimeStamp()而DateTime使用NOW(来获取当前时间);
输入NULL时,系统会输入系统当前日期与时间; 无任何输入时,系统会输入系统当前日期与时间;

四、数据类型的选择

整型:根据要显示的最大值决定;
浮点型:要显示小数。如果要精确到小数点后10位,就选择DOUBLE,而不应该选择FLOAT。DECIMAL精度较高,浮点数会出现误差,如果精度较高,则应选择定点数DECIMAL;
字符串型:定长与变长的区别,CHAR类型占用空间比较大,但是处理速度比VARCHAR快,如果长度变化不大,如身份证号码那种,最好选择CHAR类型。而对于评论字符串,最好选择VARCHAR;
时间:根据需要显示的类型咯,特别是TIMESTAMP,如果需要显示的时间与时区对应,就应该选择TIMESTAMP;
ENUM类型和SET类型:长度不同,ENUM类型最多可以由65535个成员,而SET类型最多只能包含64个成员。且ENUM只能单选,而SET类型可以多选;
TEXT类型和BLOB类型:TEXT只能存储字符数据,而BLOB可以存储二进制数据。如果是纯文本,适合TEXT。如果是图片等适合存二进制;