char、varchar的区别

问题点归纳:

sqlserver中,當字段定義為char(2)時,表示存儲的值一定會佔用2字符,不夠的用空格代替。即當存儲的值是1時,實際存儲的值是'1 '(1+一個空格),這樣Delphi前台代碼若直接將此值AsInteger就會報錯!

知识点:

char的长度是不可变的,varchar的长度是可变的。

定义一个char(6),存'abc',所占用的长度依然为6,除了'abc'外,后面还跟了3个空格。取数据时要用trim()去掉多余的空格。

定义一个varchar(6),存'abc',所占用的长度为3,不会有空格作填补,取数据不需要去空格。

由于char长度固定,方便程序的存储与查找,故存取速度要比varchar快得多,但是难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。

char 最多能存放的字符个数 255,和编码无关。

varchar最多能存放 65532 个字符。varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是 65,532字节。

char的存储方式:对于一个英文字符(ASCII)占用1个字节,一个汉字占用2个字节。

varchar的存储方式:对于每个英文字符、汉字都占用2个字节。

char、varchar的存储数据都非unicode的字符数据。

另参考:

https://blog.csdn.net/lovemysea/article/details/82315514

原文地址:https://www.cnblogs.com/168-h/p/15118021.html