mysql中char、varchar、nvarchar区别

可变长度的Unicode字符数据,最大长度4000个字符。字节的存储大小是所输入字符个数的两倍。char的存储速率比varchar要高,因为varchar要去计算输入字符的长度。但是空间的利用率上varchar要比char更好。我们知道Unicode编码对英文和中文字符都是用两个字节表示,nvarchar一般用来存储中文 ,存储英文的时候数量上会...
mysql中char、varchar、nvarchar区别
mysql 中 char 、 varvhar 、 nvarchar 都是用来 存储字符串 的,只是他们的存储方式不一样。

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

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

可变长度的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。2022-07-08
mengvlog 阅读 29 次 更新于 2025-09-10 06:36:25 我来答关注问题0
  •  湖北倍领科技 char和varchar2区别在哪

    1、char的长度是不可变的,而varchar的长度是可变的 字段b:类型char(10), 值为:abc,存储为:abc (abc+7个空格)字段d:类型varchar(10), 值为:abc,存储为:abc (自动变为3个的长度)2、超出长度自动截取 字段c:类型char(3), 值为:abcdefg,存储为:abc(defg自动删除)...

  •  科技猕猴桃 2017年12月计算机二级MySQL模拟试题及答案(3)

    2、下列___类型不是MySQL中常用的的数据类型。A.INT B.VAR C.TIME D.CHAR 3、可用于从表或视图中检索数据的SQL语句是___。A.SELECT语句 B.INSERT语句 C.UPDATE语句 D.DELETE语句 4、SQL语言又称___。A.结构化定义语言 B.结构化控制语言 C.结构化查询语言 D.结构化操纵语言 5、下列语句中...

  •  黑科技1718 数据库函数有哪些?

    因数据库不同有不同的函数,以oracle为例:常用的有单条语句作用的函数:destinct(去除重复行),to_char(转换自符串),to_date(日期格式函数),sumstr(截取自符串),lower(将字母转换为小写),upper(将字母矗换为小写),char(将数字转换为字符),ascii(求字符的ascii码)等函数; 组函数:min(求最小值),max(求最大...

  • 有两种方式:方式 1:在配置文件中开启。在配置文件中开启单表空间设置参数 innodb_filer_per_table,这样默认对当前库下所有表开启单表空间。innodb_file_per_table=1另外也可以直接建表时指定单表空间mysql> create table t1 (id int, r1 char(36)) tablespace innodb_file_per_table;Query OK, ...

  •  lzp4881 sql中declare是什么意思

    sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个学生的班级。那么在这个存储过程里面, 学号就是参数。你给什么学号, 它就返回给你相应的班级。又或者你也可以做成, 只要你输入学号, 这个存储过程就会将这个...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部