CHAR 用于存储固定长度的数据,CHAR字段上的索引效率级高,但是不适用于字符长度不确定的数据。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
VARCHAR 为了解决上面提到问题,SQL设计了专门存储可变长度的数据类型,但相应的损失存储效率。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。
VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
用法:从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
TEXT:存储可变长度的非Unicode数据,最大长度为 65535 (2^16-1) 个字符 。
MEDIUMTEXT :存储可变长度的非Unicode数据,最大长度为 16777215 (2^24-1) 个字符。
LONGTEXT :存储可变长度的非Unicode数据,最大长度为 2147483647 (2^32-1) 个字符。
TINYTEXT :存储可变长度的非Unicode数据,最大长度为 255 (2^8-1) 个字符。
与TEXT类似的数据类型是BLOG,区别是
TEXT 与 BLOG 的共同点:
用法:如果不涉及存储图片与文本混合的二进制数据,或者存储中文文本是,建议使用TEXT
在前面几种类型前加N
。它表示存储的是Unicode数据类型的字符。
英文一般只需要字母表和一些符号字符组成的编码表,因只需要一个字节就可以存储字符。但是中文里的每个汉字并不是字母的排列组合,需要更多的存储空间,一般会占用两个字节。
为了兼容不同语言的字符,需要使用 Unicode 字符集,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
用法:如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。