第4章 MySQL数据类型


1、四种基本数据类型:整型类型、浮点数类型和定点数类型;日期与时间类型;字符串类型;二进制类型


     整型:integer 4字节, smallint2字节, tinyint 1字节,midiumint 3字节,bigint 8字节。


     mysql支持的数据类型的名称后指定显示宽度 数据类型 (显示宽度)。插入数据的显示宽度大于设置的显示宽度时,设置的显示宽度在显示时失效,数据宽度不能大于默认宽度,大于则数值超过最大值范围。zerofill参数表示数字不足的显示空间用0填补。


     自增属性。字段值的最大值不超过255,则选择tinyint足够,取值很大时,根据取值范围选择int或bigint,最常用的整数类型是int。




    


     浮点数类型:使用浮点数类型和定点数类型表示小数,包括单精度浮点数类型(float)和双精度浮点数类型(double),定点数是decimal类型。decimal的有效取值范围由M和D决定,且Decimal型的字节数是M+2,定点数的存储空间由其精度决定。


     数据类型 (M,D)。 M参数称为精度,是数据的总长度,小数点不占位置;D是标度,指小数点后的长度为D。该方式不是浮点数的标准方法,定义浮点数时最好不要使用,会影响数据库的迁移。


在mysql中,定点数以字符串形式存储,因此精度比浮点数高,对精度要求高的情况下定点数较安全。浮点数会存在误差。





日期与时间类型,YEAR表时间,DATE表示日期;TIME表示时间;DATETIME和TIMESTAMP表示日期和时间。


     YEAR类型:使用四位字符串或数字表示,范围从1901~2155,超过插入0000。使用两位字符串表示,'00'~'69'转换为2000~2069,'0'和'00'转换为2000。使用两位数字表示,1~69转换为2001到2069,70~99转换为1970~1999,插入0转换为0000。




     


     TIME类型的范围从'-838:59:59'~'838:59:59',小时的范围扩大是为了表示某些特殊需要的时间间隔。占三个字节。


     'D HH:MM:SS'格式的字符串保存为'D*24+HH:MM:SS'.输入时有'HH:MM:SS'\'HH:MM'\'D HH:MM'\'D HH'\'SS'的形式。


     'HHMMSS'或HHMMSS格式会转为相应的形式。


     使用CURRENT_TIME或NOW()输入当前系统时间。



     DATE类型使用4个字节,YYYY-MM-DD形式显示DATE类型的值。赋值用'YYYY-MM-DD'或'YYYYMMDD'格式的字符串表示,任何标点都可以做间隔符。'YY-MM-DD'和'YYMMDD'按YEAR类型的转换规则。使用CURRENT_TIME或NOW()输入当前系统日期。



     DATETIME类型,YYYYMMDDHHMMSS之类的,使用NOW()来输入当前系统日期和时间。作用等价于DATE类型和TIME类型的组合。



     TIMESTAMP类型的显示形式与DATETIME一样,但范围更小,输入时要保证在TIMESTAMP的有效范围内。使用CURRENT_TIMESTAMP来输入系统当前日期与时间,输入NULL和无任何输入,系统会输入系统当前日期与时间。另一个特殊点是时间根据时区显示的。



字符串类型用于在数据库中存储字符串的数据类型。包括CHAR VARCHAR BLOB TEXT ENUM SET.


     CHAR和VARCHAR创建时指定长度,CHAR长度在0~255的任意值,长度固定;VARCHAR长度0~65535之间,变长,使用多少分配多少,实际占用空间为字符串实际长度+1(字符串的结束标识符占用一个字节),char类型的字符串末尾不保留最后的空格,varchar则保留。xuan'ze


     enum类型,属性名 ENUM('值1', '值2', ..., '值n'),值末尾的空格会被删除,取值列表最多能有65535个值。如果加上not null属性,其默认值为取值列表的第一个元素,不加则允许插入NULL,NULL为默认值。


     set类型,属性名 SET('值1', '值2', ..., '值n'),值末尾的空格会被删除,取值列表最多能有64个值.mysql存储值得顺序排列编号。set类型能在取值列表内取一个值。


     TEXT类型只能保存字符数据。





     二进制类型存储的是二进制数据。包括BINARY VARBINARY BIT TINYBLOB BLOB MEDIUMBLOM LONGBLOB


     BINARY类型长度固定,不足最大长度的空间由'\0'补全。


     BIT类型可以指定最大字节长度M,M的最大值为64,范围是0~2^64-1。以二进制形式显示。


     BLOB类型可以用来保存数据量很大的二进制数据。主要用来存储图片、pdf文档等二进制文件。通常情况下是存储在文件系统中,在数据库中存储文件路径,但这种存储方式的访问速度比数据库中的慢。




如何选择数据类型


     1、整数类型,如果字段最大值不超过255TINYINT足够,最大是BIGINT。最常用的是INT类型。


     2、浮点数类型包括float和double型,如果需要精确到小数点后10位以上,应该选择double类型。


     3、浮点数和定点数在插入值的精度高于定义的精度,都会四舍五入处理,定点数会给出警告。mysql中,定点数类型精度较高,浮点数会出现误差。


     4、varchar占用的空间比char小,对于长度变化比较大的字符串类型,选择varchar;对于长度变化不大和查询速度要求较高的字符串类型,应选择char


     5、只记录年份用year,只记录时间用TIME,只记录日期用DATE,记录日期和时间用DATETIME和TIMESTAMP,DATETIME范围比TIMESTAMP大,TIMESTAMP显示的时间与时区对应。


     6、ENUM类型最多65535个成员,只能从成员中选择一个;SET最多64个成员,可以从成员中选择多个。


     7、TEXT只能存储字符串类型,存储纯文本;BLOB存储二进制数据,存储图片等。



MYSQL中存储路径:CHAR、VARCHAR和TEXT可以存储路径,但会过滤掉‘\’,路径中用'/'或'\\'代替,就可以完整的表示路径。


MYSQL中定义布尔类型:可以定义BOOL和BOOLEAN类型,最后转换为TINYINT(1)。


MYSQL存储JPG和MP3音乐:一般是存储图片和音频文件所在的路径,另一种方式是BLOB类型存储二进制文件。