MySQL的字段类型
MySQL 字段类型可以简单分为三大类
- 数值类型:整型(TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT)、浮点型(FLOAT 和 DOUBLE)、定点型(DECIMAL)
- 字符串类型:CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB 等,最常用的是 CHAR 和 VARCHAR。
- 日期时间类型:YEAR、TIME、DATE、DATETIME 和 TIMESTAMP 等。
整数类型的 UNSIGNED 属性的作用
可用于扩大正数取值范围。例如:
- 有符号 INT:范围是 -2147483648 到 2147483647
- 无符号 INT(使用 UNSIGNED 属性):由于不使用符号位,所有 32 位都用于表示数值,范围是 0 到 4294967295
常用场景:对于从 0 开始递增的 ID 列,使用 UNSIGNED 属性可以非常适合,因为不允许负值并且可以拥有更大的上限范围,提供了更多的 ID 值可用。
CHAR 和 VARCHAR 的区别
区别:CHAR 是定长字符串,VARCHAR 是变长字符串。
- CHAR 在存储时会在右边填充空格以达到指定的长度,检索时会去掉空格;
- VARCHAR 在存储时需要使用 1 或 2 个额外字节记录字符串的长度,检索时不需要处理。
- CHAR 更适合存储长度较短或者长度都差不多的字符串,例如 Bcrypt 算法、MD5 算法加密后的密码、身份证号码。
- VARCHAR 类型适合存储长度不确定或者差异较大的字符串,例如用户昵称、文章标题等。
- CHAR(M) 和 VARCHAR(M) 的 M 都代表能够保存的字符数的最大值,无论是字母、数字还是中文,每个都只占用一个字符。
NULL 和 '' 的区别是什么
NULL 跟 ''(空字符串)是两个完全不一样的值,区别如下:
- NULL 代表一个不确定的值,就算是两个 NULL,它俩也不一定相等。例如,SELECT NULL=NULL的结果为 false,但是在我们使用DISTINCT,GROUP BY,ORDER BY时,NULL又被认为是相等的。
- ''的长度是 0,是不占用空间的,而NULL 是需要占用空间的。
- NULL 会影响聚合函数的结果。例如,SUM、AVG、MIN、MAX 等聚合函数会忽略 NULL 值。
- COUNT 的处理方式取决于参数的类型。如果参数是 *(COUNT(*)),则会统计所有的记录数,包括 NULL 值;如果参数是某个字段名(COUNT(列名)),则会忽略 NULL 值,只统计非空值的个数。
- 查询 NULL 值时,必须使用 IS NULL 或 IS NOT NULLl 来判断,而不能使用 =、!=、 <、> 之类的比较运算符。而''是可以使用这些比较运算符的。