1. char 和 varchar 类型.
char 和 varchar 都用来保存数据库中较短的字符串.
二者的主要区别在于:
char 列的长度固定为创建表时声明的长度. 长度可以从 0-255 的任何值.
varchar 列中的值为可变长的字符串. 长度可以指定为 0-65535 之间的值.
在检索时, char 列删除了尾部的空格. 而 varchar 保留了这些空格.
下面是示例:
c字段的长度为4, v字段的长度为 2.
给后面添加一个"+"字符, 看的更清楚些.
当输入的字符串末尾包含空格时, varchar 保留空格, char类型最后的空格在做操作时都被删除. varchar 依旧保留.
2. timestamp 和 datetime.
两种类型之间的区别:
(1) TIMESTAMP 类型支持的时间范围较小. 其取值范围从 19700101080001 到 2038年的某个时间. DATETIME 是从 1000-01-01 00:00:00 到 9999-12-31 23:59:59 .
(2)表中的第一个 TIMESTAMP 列自动设置为系统时间. 如果在一个 TIMESTAMP 列中插入 NULL, 则该列值将自动设置为当前系统时间, 在插入或更新一行时但不给出明确的 TIMESTAMP 列赋值时也会自动设置为当前的时间和日期. 当插入的值超出取值范围时, MySQL 使用 "0000-00-00 00:00:00" 进行填补.
(3) TIMESTAMP 的插入和查询都受当地时区的影响. 更能反映出实际的日期. 而DATETIME 则只能反映出插入时当地的时区. 其他时区的人查看数据必然会有误差.
3. BINARY
BINARY 包含二进制字符串而不包含非二进制字符串.
当保存 BINARY 值时, 在值的最后通过填充 "0x00"(零字节) 以达到指定的字段定义长度.
对于一个 BINARY(3) 的类型, 当插入 'a' 时变为 'a\0\0' .
4. ENUM
ENUM 又称为 枚举类型. 它的值范围需要在创建表时通过枚举方式显示指定, 对于 1-255 个成员的枚举需要1个字节存储. 对于 255-65535 个成员, 需要2个字节存储. 最多允许 65535 各成员.
枚举类型忽略大小写. 在存储时都将它们转成了大写. 对于插入不在枚举范围内的值, 不显示插入数值.