mysql中char、varchar、nvarchar区别

苦心人,天不负。


mysqlcharvarvharnvarchar都是用来存储字符串的,只是他们的存储方式不一样。

char

固定长度的非Unicode字符数据,最大长度8000个字符。例:char(8) 输入的字符小于8时,后面用空格补齐,输入的字符大于8时,截取前8个字符。

varchar

可变长度的非Unicode字符数据,最大长度8000个字符。例:varchar(8) 存储的字符实际上就是你所输入的字符。但要在总长度上加1字符,用来记录其字节的长度。

nvarchar

可变长度的Unicode字符数据,最大长度4000个字符。字节的存储大小是所输入字符个数的两倍。

char的存储速率比varchar要高,因为varchar要去计算输入字符的长度。但是空间的利用率上varchar要比char更好。

我们知道Unicode编码对英文和中文字符都是用两个字节表示,nvarchar一般用来存储中文 ,存储英文的时候数量上会有所损失。

建议纯英文和数字用char/varchar,有中文使用nvarchar。

对于MyISAM存储引擎的表,尽量使用char,对于经常需要修改而形成碎片的myisam数据表更是如此,它的缺点是占用磁盘空间。

对于InnoDB存储引擎的表,尽量使用varchar,因为它的数据存储格式对固定长度的格式和可变长度的格式不加以区分,所以char会比varchar占用更多存储空间,从减少空间占用和磁盘I/O角度看,使用varchar更好。

关于varchar还有一个问题,varchar可以自适应存储空间,那varchar(20)和varchar(1000)存储都是一样的,那每次设计越大就好,免得以后不够用,这个观点是错的,因为mysql会把表信息放进内存中(查询第一次后就缓存了),这时内存的申请是按照固定长度来的,varchar很大,申请的内存也会越大,所以还是按需设值。

总结

1、存储很短的信息的时候应该用char,例如门牌号:104,因为varchar还会再多一个字节记录长度。

2、频繁改变的字段应该用char,因为每次修改varchar都会重新计算长度,而这些char不用。

3、大数据量(多行)提取时varchar的磁盘I/O消耗更低,意味着varchar在综合查询性能上比char更好。

4、存储数据有中文时,有用nvarchar。

    原文作者:还有236
    原文地址: https://www.jianshu.com/p/dbc680fdf9a9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞