[TOC] MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 ## 数值类型 MySQL支持所有标准SQL数值数据类型。 <table class="reference"> <tbody> <tr> <th width="10%"> <strong> 类型 </strong> </th> <th width="15%"> <strong> 大小 </strong> </th> <th width="30%"> <strong> 范围(有符号) </strong> </th> <th width="30%"> <strong> 范围(无符号) </strong> </th> <th width="15%"> <strong> 用途 </strong> </th> </tr> <tr> <td> TINYINT </td> <td> 1 字节 </td> <td> (-128,127) </td> <td> (0,255) </td> <td> 小整数值 </td> </tr> <tr> <td> SMALLINT </td> <td> 2 字节 </td> <td> (-32 768,32 767) </td> <td> (0,65 535) </td> <td> 大整数值 </td> </tr> <tr> <td> MEDIUMINT </td> <td> 3 字节 </td> <td> (-8 388 608,8 388 607) </td> <td> (0,16 777 215) </td> <td> 大整数值 </td> </tr> <tr> <td> INT或INTEGER </td> <td> 4 字节 </td> <td> (-2 147 483 648,2 147 483 647) </td> <td> (0,4 294 967 295) </td> <td> 大整数值 </td> </tr> <tr> <td> BIGINT </td> <td> 8 字节 </td> <td> (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) </td> <td> (0,18 446 744 073 709 551 615) </td> <td> 极大整数值 </td> </tr> <tr> <td> FLOAT </td> <td> 4 字节 </td> <td> (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) </td> <td> 0,(1.175 494 351 E-38,3.402 823 466 E+38) </td> <td> 单精度 <br> 浮点数值 </td> </tr> <tr> <td> DOUBLE </td> <td> 8 字节 </td> <td> (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) </td> <td> 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) </td> <td> 双精度 <br> 浮点数值 </td> </tr> <tr> <td> DECIMAL </td> <td> 对DECIMAL(M,D) ,如果M&gt;D,为M+2否则为D+2 </td> <td> 依赖于M和D的值 </td> <td> 依赖于M和D的值 </td> <td> 小数值 </td> </tr> </tbody> </table> ## 日期和时间类型 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。 <table class="reference"> <tbody> <tr> <th width="10%"> 类型 </th> <th width="10%"> 大小 <br> (字节) </th> <th width="40%"> 范围 </th> <th> 格式 </th> <th> 用途 </th> </tr> <tr> <td width="10%"> DATE </td> <td width="10%"> 3 </td> <td width="40%"> 1000-01-01/9999-12-31 </td> <td> YYYY-MM-DD </td> <td> 日期值 </td> </tr> <tr> <td width="10%"> TIME </td> <td width="10%"> 3 </td> <td width="40%"> '-838:59:59'/'838:59:59' </td> <td> HH:MM:SS </td> <td> 时间值或持续时间 </td> </tr> <tr> <td width="10%"> YEAR </td> <td width="10%"> 1 </td> <td width="40%"> 1901/2155 </td> <td> YYYY </td> <td> 年份值 </td> </tr> <tr> <td width="10%"> DATETIME </td> <td width="10%"> 8 </td> <td width="40%"> 1000-01-01 00:00:00/9999-12-31 23:59:59 </td> <td> YYYY-MM-DD HH:MM:SS </td> <td> 混合日期和时间值 </td> </tr> <tr> <td width="10%"> TIMESTAMP </td> <td width="10%"> 4 </td> <td width="40%"> 1970-01-01 00:00:00/2037 年某时 </td> <td> YYYYMMDD HHMMSS </td> <td> 混合日期和时间值,时间戳 </td> </tr> </tbody> </table> ## 字符串类型 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET <table class="reference"> <tbody> <tr> <th width="20%"> 类型 </th> <th width="25%"> 大小 </th> <th width="55%"> 用途 </th> </tr> <tr> <td> CHAR </td> <td> 0-255字节 </td> <td> 定长字符串 </td> </tr> <tr> <td> VARCHAR </td> <td> 0-65535 字节 </td> <td> 变长字符串 </td> </tr> <tr> <td> TINYBLOB </td> <td> 0-255字节 </td> <td> 不超过 255 个字符的二进制字符串 </td> </tr> <tr> <td> TINYTEXT </td> <td> 0-255字节 </td> <td> 短文本字符串 </td> </tr> <tr> <td> BLOB </td> <td> 0-65 535字节 </td> <td> 二进制形式的长文本数据 </td> </tr> <tr> <td> TEXT </td> <td> 0-65 535字节 </td> <td> 长文本数据 </td> </tr> <tr> <td> MEDIUMBLOB </td> <td> 0-16 777 215字节 </td> <td> 二进制形式的中等长度文本数据 </td> </tr> <tr> <td> MEDIUMTEXT </td> <td> 0-16 777 215字节 </td> <td> 中等长度文本数据 </td> </tr> <tr> <td> LONGBLOB </td> <td> 0-4 294 967 295字节 </td> <td> 二进制形式的极大文本数据 </td> </tr> <tr> <td> LONGTEXT </td> <td> 0-4 294 967 295字节 </td> <td> 极大文本数据 </td> </tr> </tbody> </table> ## CHAR和VARCHAR ### CHAR 用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围仍0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补 ### VARCHAR 它是一种可变长度的字符串类型,并且也必须带有一个范围在0-65535之间的指示器。CHAR 和 VARCHGAR 不同之处在于 MySQL 数据库处理这个指示器的方式:CHAR 把这个大小视为值的大小,在长度不足的情况下就用空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度来存储值。所以短于指示器长 度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。 ## ENUM ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。最大可以有 65535 个成员值 ~~~ enum('男','女','保密') ~~~ ## SET SET 类型和 ENUM 类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。一个 SET 类型最多可以包含 64 项元素。 ~~~ set('游戏','看书','打篮球') ~~~ 常用的数据类型 <table> <tbody> <tr> <th>字段</th> <th>类型</th> </tr> <tr> <td>姓名</td> <td>char(20)</td> </tr> <tr> <td>价格</td> <td>DECIMAL(7, 3)</td> </tr> <tr> <td>文章类型</td> <td>TEXT</td> </tr> <tr> <td>手机</td> <td>char(11)</td> </tr> <tr> <td>时间戳</td> <td>int(10)</td> </tr> </tbody> </table>