一、目录:
1.VARCHAR和CHAR的区别
2.BLOB和TEXT的区别
二、VARCHAR 和 CHAR 的区别
2.1 对于VARCHAR类型:
- 例如VARCHAR(5), 代表可以存储5个字符,当只存储了3个字符,而不够5个的时候,就自动分配三个字符长度,而不会像CHAR一样填充空白。定义VARCHAR必须指定大小。
- 范围:0-65535个字符
- 空格符:当带有空格填充的字符被取出时,空格字符不会被去掉
- 数据超过范围:如果插入的数据超过范围,在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉,并且产生一条警告通知。
2.2 对于CHAR类型
- 例如CHAR(5),代表可以存储5个字符,当不够5个的时候,用空格(space)填充。如果定义CHAR类型没有给出长度,则默认为1。
- 范围:0-255个字符
- 空格符:当带有空格填充的字符被取出时,空格字符将会被去掉(remove),除非SQL模式:PAD_CHAR_TO_FULL_LENGTH被开启
- 数据超过范围:当插入数据超过范围的时候,在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉。
2.3 下图用一张表格较为形象地来表示这两者的范围:
VARCHAR | CHAR | |
---|---|---|
类型表示 | VARCHAR(5):存储5个字符,当不够5的时候,自动分配相应长度,而不会填充空白。定义VARCHAR必须指定大小 | CHAR(5):存储5个字符,当不够5个的时候,用空格(space)填充。如果定义CHAR类型没有给出长度,则默认为1 |
范围 | 0-65535个字符 | 0-255个字符 |
空格符 | 当带有空格填充的字符被取出时,空格字符不会被去掉 | 当带有空格填充的字符被取出时,空格字符将会被去掉(remove),除非SQL模式:PAD_CHAR_TO_FULL_LENGTH被开启 |
数据超过范围 | 如果插入的数据超过范围,在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉,并且产生一条警告通知。 | 当插入数据超过范围的时候,在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉。 |
三、 BLOB 和 TEXT 的区别
3.1 BLOB类型:
- BLOB类型: TINYBLOB BLOB MEDIUMBLOB LONGBLOB
- 存储方式:二进制,没有字符集
- 排序:基于二进制数值
- 数据超过范围:对于所存数据超过容量大小的情况,在非严格的SQL模式下(strict SQL mode is not enabled),多余的字符将会被切割掉,并且会产生一条警告通知,如果在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉,并且产生一条警告通知。
- 存储数据后边的空格
3.2 TEXT类型
- TEXT类型: TINYTEXT TEXT MEDIUMTEXT LONGTEXT
- 存储方式:字符串,有字符集
- 排序:基于字符集排序
- 数据超过范围:对于所存数据超过容量大小的情况,在非严格的SQL模式下(strict SQL mode is not enabled),多余的字符将会被切割掉,并且会产生一条警告通知,如果在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉,并且产生一条警告通知。
- 不会存储数据后边的空格
2.3 用一张表格来表示:
BLOB | TEXT | |
---|---|---|
类型表示 | TINYBLOB BLOB MEDIUMBLOB LONGBLOB | TINYTEXT TEXT MEDIUMTEXT LONGTEXT |
存储方式 | 二进制,没有字符集 | 字符串,有字符集 |
排序 | 基于二进制数值 | 基于字符集排序 |
空格符 | 存储 | 不存储 |
数据超过范围 | 对于所存数据超过容量大小的情况,在非严格的SQL模式下(strict SQL mode is not enabled),多余的字符将会被切割掉,并且会产生一条警告通知,如果在严格的SQL模式下(using strict SQL Mode ),会产生一条错误通知,并且插入操作不会被执行。但是如果多余的字符是空格,那么无论在哪种模式下(regardless of SQL mode),空格都会被切割掉,并且产生一条警告通知。 | 一样的 |