varchar char 的值都是忽略值最后的空格也就是值‘my ’两个存储,值和‘my','my '都是相等的
从 CHAR(4)和 VARCHAR(4)列检索的值并不总是相同,因为检索时从 CHAR 列删除了尾部的空格
另外varchar最后要多用一个字节存储记录的长度
TINYTEXT或TINYBLOB2^8-1255TEXT或BLOB2^16-1(64K-1)65535MEDIUMTEXT或MEDIUMBLOB2^24-1(16M-1)16777215LONGBLOB2^32-1(4G-1)4294967295
6.2.3.1CHAR和VARCHAR类型
CHAR和VARCHAR类型是很相似的,但是它们被存储与检索的方式有些不同。
一个CHAR列的长度被固定为你创建表进所声明的长度。长度可以是1和255之间的任一值。(从MySQL3.23之后,CHAR的长度可以是0到255。)当CHAR值被存储时,他们被用空格在右边填补到指定长度。当CHAR值被检索时,尾部的空格被截除。
VARCHAR列的值是变长的字符串。你可以声明一个VARCHAR列在1到255,就像对CHAR列一样。然而,与CHAR相反的,VARCHAR值只以所需的字符数存储,另加一个字节存储记录的长度。值并不被填补;相反的,当被存储时,尾部的空格被截除。(这个截除空格方式不同于ANSISQL规约。)
如果将一个超过列最大长度的值赋给一个CHAR或VARCHAR列,该值将截断以适合它。
下表通过在CHAR(4)和VARCHAR(4)列中存储不同的字符串的结果显示了两种类型列的不同:
值CHAR(4)存储需求VARCHAR(4)存储需求''''4字节''1字节'ab''ab'4字节'ab'3字节'abcd''abcd'4字节'abcd'5字节'abcdefgh''abcd'4字节'abcd'5字节
在各种情况下,CHAR(4)和VARCHAR(4)列的检索值均是一样的,因为在CHAR列上检索值的尾部空格会被截除。
CHAR和VARCHAR列值以省略字母大小写的方式进行排序和比较,除非在表建立时BINARY属性被指定。BINARY属性意味着,该列值根据MySQL服务器正在运行的机器的ASCII表顺序进行字母大小写敏感的方式排序和比较。BINARY并不影响该列如何被存储和检索。
BINARY属性是有粘性的。这就意味着,如果一个被标记为BINARY的列被用于一个表达式中,整个表达式将作为一个BINARY值被比较。
在表创建时,MySQL可能会隐式地改变一个CHAR或VARCHAR列的类型。查看章节6.5.3.1隐式的列定义变化。
6.2.3.2BLOB和TEXT类型
一个BLOB是一个可以保存一可变数量的数据的二进制大对象。四个BLOB类型(TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB)之间的不同仅仅在于他们能保存值的最大长度不一致。查看章节6.2.6列类型存储需求。
四个TEXT类型(TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT)对应与四个BLOB类型,并且有相同的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别就是,对BLOB值是以字母大小写敏感的方式进行排序和比较的,而对TEXT值以忽略字母大小写方式进行排序和比较。换句话说,TEXT是一个忽略字母大小写的BLOB。
如果将一个超过列类型最大长度的值赋给一个
从 CHAR(4)和 VARCHAR(4)列检索的值并不总是相同,因为检索时从 CHAR 列删除了尾部的空格
另外varchar最后要多用一个字节存储记录的长度
TINYTEXT或TINYBLOB2^8-1255TEXT或BLOB2^16-1(64K-1)65535MEDIUMTEXT或MEDIUMBLOB2^24-1(16M-1)16777215LONGBLOB2^32-1(4G-1)4294967295
6.2.3.1CHAR和VARCHAR类型
CHAR和VARCHAR类型是很相似的,但是它们被存储与检索的方式有些不同。
一个CHAR列的长度被固定为你创建表进所声明的长度。长度可以是1和255之间的任一值。(从MySQL3.23之后,CHAR的长度可以是0到255。)当CHAR值被存储时,他们被用空格在右边填补到指定长度。当CHAR值被检索时,尾部的空格被截除。
VARCHAR列的值是变长的字符串。你可以声明一个VARCHAR列在1到255,就像对CHAR列一样。然而,与CHAR相反的,VARCHAR值只以所需的字符数存储,另加一个字节存储记录的长度。值并不被填补;相反的,当被存储时,尾部的空格被截除。(这个截除空格方式不同于ANSISQL规约。)
如果将一个超过列最大长度的值赋给一个CHAR或VARCHAR列,该值将截断以适合它。
下表通过在CHAR(4)和VARCHAR(4)列中存储不同的字符串的结果显示了两种类型列的不同:
值CHAR(4)存储需求VARCHAR(4)存储需求''''4字节''1字节'ab''ab'4字节'ab'3字节'abcd''abcd'4字节'abcd'5字节'abcdefgh''abcd'4字节'abcd'5字节
在各种情况下,CHAR(4)和VARCHAR(4)列的检索值均是一样的,因为在CHAR列上检索值的尾部空格会被截除。
CHAR和VARCHAR列值以省略字母大小写的方式进行排序和比较,除非在表建立时BINARY属性被指定。BINARY属性意味着,该列值根据MySQL服务器正在运行的机器的ASCII表顺序进行字母大小写敏感的方式排序和比较。BINARY并不影响该列如何被存储和检索。
BINARY属性是有粘性的。这就意味着,如果一个被标记为BINARY的列被用于一个表达式中,整个表达式将作为一个BINARY值被比较。
在表创建时,MySQL可能会隐式地改变一个CHAR或VARCHAR列的类型。查看章节6.5.3.1隐式的列定义变化。
6.2.3.2BLOB和TEXT类型
一个BLOB是一个可以保存一可变数量的数据的二进制大对象。四个BLOB类型(TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB)之间的不同仅仅在于他们能保存值的最大长度不一致。查看章节6.2.6列类型存储需求。
四个TEXT类型(TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT)对应与四个BLOB类型,并且有相同的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别就是,对BLOB值是以字母大小写敏感的方式进行排序和比较的,而对TEXT值以忽略字母大小写方式进行排序和比较。换句话说,TEXT是一个忽略字母大小写的BLOB。
如果将一个超过列类型最大长度的值赋给一个