-在写数据库的时候字符串类型的数据该怎么定义?
-了解了他们的区别就好办了!

char、varchar、nchar、nvarchar的说明:

  • char ( n ) :固定长度,非Unicode字符数据。n 用于定义字符串大小(以字节为单位),并且它必须为 1 到 8,000 之间的值 。
  • varchar ( n | max ) :可变长度,非Unicode字符数据。 使用 n 定义字符串大小(以字节为单位),可以是介于 1 和 8,000 之间的值;或使用 max 指明列约束大小上限为最大存储 2^31-1 个字节 (2GB)。存储大小为 n + 2 个字节
  • nchar ( n ):固定长度,Unicode字符数据。 n 用于定义字符串大小(以双字节为单位),并且它必须为 1 到 4,000 之间的值 。 存储大小为 n 字节的两倍。
  • nvarchar ( n | max ):可变长度,Unicode字符数据。n 用于定义字符串大小(以双字节为单位),并且它可能为 1 到 4,000 之间的值 。 max 指示最大存储大小是 2^30-1 个字符 (2 GB) 。== 存储大小为 n 字节的两倍 + 2 个字节==。

Unicode或非Unicode的区别:

  • nchar、nvarchar都是定义Unicode字符数据,这两种类型汉字和英文字符都需要两个字节存储。
  • char、varchar都是定义非Unicode字符数据,这两种类型英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储,如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码

定长和变长的区别:

  • char、nchar是定长的,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度。其特点是存取速度快,占空间大,应用程序如果要使用则需要用trim之类的函数把两边的空格去掉。
  • varchar、nvarchar是变长的,实际存储空间是动态变化的,不会在后面自动填充。其特点是存取速度慢,占空间小,应用程序使用时无需处理。

总结一下:

  • 如果是纯英文和数字,就可以用char/varchar
  • 如果含有中文字符,则可以用nchar/nvarchar