<div style="font-size:16px;">
<p>mysql中的列数据类型:</p>
<p>数值型、字符串类型、日期/时间类型3种</p>
<p>几种列类型描述使用了下述惯例:</p>
<p>· M#表示最大显示宽度。最大有效显示宽度是255。</p>
<p>· D#适用于浮点和定点类型,表示小数点后面的位数。最大可能的值是30,但不应大于M-2。</p>
<p>· [] #方括号(‘[’和‘]’)表示可选部分。</p>
<p>1、 数值类型</p>
<p>严格数值类型(INTEGER、SMALLINT、DECIMAL和NUMERIC)</p>
<p>近似数值数据类型(FLOAT、REAL 和DOUBLE PRECISION), 并在此基础上做了扩展</p>
<p>扩展后增加了TINYINT、MEDIUMINT和BIGINT这3种长度不同的整型,并增加了BIT类型,用来存放位数据</p>
<p>几个注意点:</p>
<p>M指示最大显示宽度。最大有效显示宽度是255</p>
<p>如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性!!!!!!!!!!!</p>
<p>SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一个别名。</p>
<p>在整数列定义中:SERIAL DEFAULT VALUE是NOT NULL AUTO_INCREMENT UNIQUE的一个别名。</p>
<p>警告:应当清楚,当使用在整数值(其中一个是UNSIGNED类型)之间使用减号时,结果是无符号</p>
<p>整数类型:</p>
<p>整数类型 字节 取值范围</p>
<p>TINYINT[(M)] [UNSIGNED] [ZEROFILL]1个字节 -128~127(有符号) 0~255(无符号)</p>
<p>SMALLINT[(M)] [UNSIGNED] [ZEROFILL]2个字节 -32768~32767(有符号) 0~65535(无符号)</p>
<p>MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]3个字节 -8388608~8388607(有符号) 0~16777215(无符号)</p>
<p>INT[(M)] [UNSIGNED] [ZEROFILL]4个字节 -2147483648~2147483647(有符号) 0~4294967295(无符号) 若不指定宽度M,则默认为int(11),一般配合zerofill,即使用"0" 填充</p>
<p>BIGINT[(M)] [UNSIGNED] [ZEROFILL]8个字节 -9223372036854775808~9223372036854775807(有符号) 0~18446744073709551615(无符号)</p>
<p>如果超出类型范围的操作,会发生"Out of range" 错误提示。为了避免此类问题发生,在选择数据类型时要根据应用的实际情况确定其取值范围</p>
<p>注意:</p>
<p>如果指定zerofill属性,会自动添加unsigned属性,虽然设置了zerofill属性,但使用select查询时填充的0并不会显示出来</p>
<p>如果没有unsigned属性,默认是有符号的,而INT类型,如果如果无unsigned属性,有符号默认长度为int(11), 有unsigned属性,无符号默认长度(10)</p>
<p>如果插入的数字的位数大于M指定的位数,不会对插入的数据有任何影响,还是按照类型的实际精度进行保存,即数值会正确被插入,但是指定的数值最大不能超出该类型的取值范围</p>
<p>整数类型还有一个属性:AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型(一般从1 开始,每行增加1)</p>
<p>一个表中最多只能有一个AUTO_INCREMENT列,对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL, 并定义为PRIMARY KEY或定义为UNIQUE键</p>
<p>使用方式如下:</p>
<p>CREATE TABLE AI (ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY);</p>
<p>CREATE TABLE AI (ID INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(ID));</p>
<p>CREATE TABLE AI (ID INT AUTO_INCRE~ENT NOT NULL, UNIQUE(ID));</p>
<p>浮点类型:</p>
<p>FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 4个字节 ±1.175494351E-38(有符号) ±3.402823466E+38</p>
<p>M是总位数,D是小数点后的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位</p>
<p>FLOAT(p) [UNSIGNED] [ZEROFILL] p表示精度(以位数表示),但MySQL只使用该值来确定是否结果列的数据类型为FLOAT或DOUBLE。</p>
<p>如果p为从0到24,数据类型变为没有M或D值的FLOAT。</p>
<p>如果p为从25到53,数据类型变为没有M或D值的DOUBLE。结果列单精度FLOAT数据类型相同。</p>
<p>FLOAT(p)语法与ODBC兼容。</p>
<p>DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 8个字节 ±2.2250738585072014E-308 ±1.7976931348623157E+308</p>
<p>M是总位数,D是小数点后的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位!!!!</p>
<p>DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]</p>
<p>REAL[(M,D)] [UNSIGNED] [ZEROFILL] 为DOUBLE的同义词。除了:如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。</p>
<p>float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示</p>
<p>定点数类型</p>
<p>DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] M+2个字节 最大取值范围和DOUBLE相同,给定DECIMAL的有效值范围由M和D确定</p>
<p>M是位数的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M |
|