前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试 utf8 utf8mb4 占用体积的对比

测试 utf8 utf8mb4 占用体积的对比

作者头像
保持热爱奔赴山海
发布2019-09-17 14:35:33
1.2K0
发布2019-09-17 14:35:33
举报
文章被收录于专栏:饮水机管理员饮水机管理员

测试对比 , utf8 和 utf8mb4 在空间占用上的区别

版本:mysql5.7.25官方社区版,默认utf8字符集

代码语言:javascript
复制
mysql [localhost:5725] {root} ((none)) > status ; 
--------------
/root/opt/mysql/5.7.25/bin/mysql  Ver 14.14 Distrib 5.7.25, for linux-glibc2.12 (x86_64) using  EditLine wrapper
Connection id:6
Current database:
Current user:root@localhost
SSL:Not in use
Current pager:stdout
Using outfile:''
Using delimiter:;
Server version:5.7.25-log MySQL Community Server (GPL)
Protocol version:10
Connection:Localhost via UNIX socket
Server characterset:utf8
Db     characterset:utf8
Client characterset:utf8
Conn.  characterset:utf8
UNIX socket:/tmp/mysql_sandbox5725.sock
Uptime:4 hours 58 min 57 sec
Threads: 1  Questions: 131  Slow queries: 0  Opens: 121  Flush tables: 1  Open tables: 107  Queries per second avg: 0.007
--------------


mysql [localhost:5725] {root} ((none)) > show global variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | utf8                                   |
| character_set_connection | utf8                                   |
| character_set_database   | utf8                                   |
| character_set_filesystem | binary                                 |
| character_set_results    | utf8                                   |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | /root/opt/mysql/5.7.25/share/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.00 sec)

# 创建2张测试表并造些测试数据

代码语言:javascript
复制
mysql [localhost:5725] {root} (test) > CREATE TABLE `t1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'pk',
  `name` varchar(10) NOT NULL DEFAULT '' COMMENT 'name',
  `age` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'age',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql [localhost:5725] {root} (test) > CREATE TABLE `t2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'pk',
  `name` varchar(10) NOT NULL DEFAULT '' COMMENT 'name',
  `age` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'age',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
代码语言:javascript
复制
insert into t1 (name,age) values('abcde12345',25);
insert into t1 (name,age) select name,age from t1 ;   用脚本多执行几次这个sql

insert into t2 (name,age) values('abcde12345',25);
insert into t2 (name,age) select name,age from t2 ;   用脚本多执行几次这个sql
代码语言:javascript
复制
select max(id) from t1; 
+----------+
| max(id)  |
+----------+
| 17301353 |
+----------+

select max(id) from t2; 
+----------+
| max(id)  |
+----------+
| 17301353 |
+----------+

# 加个索引

代码语言:javascript
复制
alter table t1 add index idx_name (name);
alter table t2 add index idx_name (name);

# 查看2张表的体积

代码语言:javascript
复制
mysql [localhost:5725] {root} (test) > show table status like 't1' \G
*************************** 1. row ***************************
           Name: t1
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 16349147
 Avg_row_length: 38
    Data_length: 631242752
Max_data_length: 0
   Index_length: 0
      Data_free: 4194304
 Auto_increment: 17366761
    Create_time: 2019-05-07 10:26:57
    Update_time: 2019-05-07 10:22:35
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

mysql [localhost:5725] {root} (test) > show table status like 't2' \G
*************************** 1. row ***************************
           Name: t2
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 16357733
 Avg_row_length: 37
    Data_length: 618659840
Max_data_length: 0
   Index_length: 0
      Data_free: 4194304
 Auto_increment: 17366761
    Create_time: 2019-05-07 10:29:16
    Update_time: 2019-05-07 10:24:09
     Check_time: NULL
      Collation: utf8mb4_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)



# 查看表物理文件占用的大小
[root@Dev-K8s-N1 /root/sandboxes/msb_5_7_25/data/test ]
# ll *.ibd
-rw-r----- 1 root root 1098907648 May  7 10:26 t1.ibd
-rw-r----- 1 root root 1098907648 May  7 10:29 t2.ibd

可以看到存相同的的数据时候, utf8mb4 并没有比 utf8 多占空间。 同时,utf8mb4 能支持emoji表情字符,因此强烈推荐建表时候使用utf8mb4字符集(注意代码连接数据库的时候也要改成utf8mb4的才行)

另外, MySQL8.0中,字符集默认就是 utf8mb4了。 大势所趋。新上的数据库,赶紧都用 utf8mb4 吧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档