外观
字符串类型
字符串类型可以分为3类:普通的文本类型(CHAR和VARCHAR)、可变类型(BLOB和TEXT)、和特殊类型(SET和ENUM)。
- 普通文本类型:即CHAR和VARCHAR类型,CHAR列的长度被固定为创建表声明的长度,取值在1-255;VARCHAR列的值是变长的字符串,取值和CHAR一样。
| 类型 | 取值范围 | 说明 |
|---|---|---|
| [national] CHAR(M) [binary|ASCII|unicode] | 0-255个字符 | 固定长度为M的字符串,其中M的取值为0-255,national关键字指 定了应该使用的默认字符集。binary关键字指定了数据是否区分大小 写(默认是区分大小写的)。ASCII关键字指定了在该列中使用latin1字符集。unicode关键字指定了是否使用UCS字符集。 |
| CHAR | 0-255个字符 | 与CHAR(M)类似 |
| [national] VARCHAR(M) [binary] | 0-255个字符 | 长度可变,其他和CHAR(M)类似 |
存储字符串长度相同的全部使用CHAR类型;字符长度不相同的使用VARCHAR类型,不预先分配存储空间,长度不要超过255。
- 可变类型:大小可以改变,TEXT类型适合存储长文本,BLOB适合存储二进制数据,支持任何数据,如声音、文本和图像等。
| 类型 | 最大长度(字节数) | 说明 |
|---|---|---|
| TINYBLOB | 28-1(255) | 小BLOB字段 |
| TINYTEXT | 28-1(255) | 小TEXT字段 |
| BLOB | 216-1(255) | 常规BLOB字段 |
| TEXT | 216-1(255) | 常规TEXT字段 |
| MEDIUMBLOB | 224-1(255) | 中型BLOB字段 |
| MEDIUMTEXT | 224-1(255) | 中型TEXT字段 |
| LONGBLOB | 232-1(255) | 长BLOB字段 |
| LONGTEXT | 232-1(255) | 长TEXT字段 |
- 特殊类型:ENUM和SET类型。
| 类型 | 最大值 | 说明 |
|---|---|---|
| ENUM(“value1”,”value2”,...) | 65535 | 该类型的列只可以容纳值之一或者NULL |
| SET(“value1”,”value2”,...) | 64 | 该类型的列可以容纳一组值或为NULL |
误区警示:BLOB、TEXT、ENUM和SET字段类型在MySQL中的检索速度不高,很难使用索引进行优化。如果必须使用这些类型,一般采用特殊的结构设计,或者与程序相结合使用其他的字段类型替代。例如,SET类型可以使用整型(0、1、2、3、…)注释功能和程序的检查功能集合替代。
若速度优先、要选择固定的列,则选择CHAR类型;若节省空间、使用动态的列,则使用VARCHAR类型;要将列的内容限制在一种选择则选择ENUM类型;允许一个列有多于一个的条目则选择SET,若字符串不区分大小写则选择TEXT类型,若区分大小写则选择BLOB类型。