mysql要额外加入一个utf8mb4数据类型,而不是原地升级utf8的原因:在Unicode标准中,有一些字符需要使用四字节长的编码方式来表示,而原来的utf8编码无法支持这样的字符,所以增加了一种名为utf8mb4的字符集用来支持这些四字节长的字符。
一、mysql要额外加入一个utf8mb4数据类型,而不是原地升级utf8的原因
MySQL中原来的utf8编码是一种三字节长的字符串编码方式,而在Unicode标准中,有一些字符需要使用四字节长的编码方式来表示,而原来的utf8编码无法支持这样的字符。因此,MySQL在5.5版本中增加了一种名为utf8mb4的字符集,用来支持这些四字节长的字符。
utf8mb4实际上是一种可以存储来自现代Unicode标准中的所有字符的编码方式,其字节长度为1到4个字节,因此可以支持Unicode编码的全部字符和表情符号。升级utf8字符集可能会导致现有的编码数据被解释为错误的字符,这会给现有的应用程序带来很大的困扰。因此,在MySQL中增加了utf8mb4这种编码方式来支持四字节长的字符,可以让旧版的应用程序继续使用原来的utf8编码,而新的应用程序可以使用utf8mb4编码来支持更多的字符。
需要注意的是,在MySQL中使用utf8mb4编码时,它的存储方式是与utf8编码不同的。使用utf8mb4编码的字符串需要消耗更多的存储空间,这也需要在应用程序设计时考虑到它可能会占用更多的存储空间。
二、mysql介绍
1、简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是较好的 RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。
2、应用环境
与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。
Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP”或“LNMP”组合。
3、系统特性
- MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性
- 支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统
- 为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和 Tcl 等
- 支持多线程,充分利用 CPU 资源
- 优化的 SQL查询算法,有效地提高查询速度
- 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中
- 提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名
- 提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径
- 提供用于管理、检查、优化数据库操作的管理工具
- 支持大型的数据库,可以处理拥有上千万条记录的大型数据库
- 支持多种存储引擎
- MySQL 是开源的,所以你不需要支付额外的费用
- MySQL 使用标准的 SQL数据语言形式
- MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言
- MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统
- 在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6新增)
- 复制全局事务标识,可支持自我修复式集群(5.6新增)
- 复制无崩溃从机,可提高可用性(5.6新增)
- 复制多线程从机,可提高性能(5.6新增)
- 3倍更快的性能(5.7新增)
- 新的优化器(5.7新增)
- 原生JSON支持(5.7新增)
- 多源复制(5.7新增)
- GIS的空间扩展(5.7新增)
4、查询和索引
只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录,它们往往在执行完名列前茅条查询命令之后就被全部加载到内存里,这将使后续的查询命令都执行得非常快–不管有没有使用索引。只有当数据库里的记录超过了 1000 条、数据总量也超过了 MySQL 服务器上的内存总量时,数据库的性能测试结果才有意义。
在不确定应该在哪些数据列上创建索引的时候,人们从 EXPLAIN SELECT 命令那里往往可以获得一些帮助。这其实只是简单地给一条普通的 SELECT 命令加一个 EXPLAIN 关键字作为前缀而已。有了这个关键字,MySQL 将不是去执行那条 SELECT 命令,而是去对它进行分析。MySQL 将以表格的形式把查询的执行过程和用到的索引等信息列出来。
在 EXPLAIN 命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系(JOIN)。在各种类型的关联关系当中,效率较高的是 system,然后依次是 const、eq_ref、ref、range、index 和 All(All 的意思是:对应于上一级数据表里的每一条记录,这个数据表里的所有记录都必须被读取一遍——这种情况往往可以用一索引来避免)。
possible_keys 数据列给出了 MySQL 在搜索数据记录时可选用的各个索引。key 数据列是 MySQL 实际选用的索引,这个索引按字节计算的长度在 key_len 数据列里给出。比如说,对于一个 INTEGER 数据列的索引,这个字节长度将是4。如果用到了复合索引,在 key_len 数据列里还可以看到 MySQL 具体使用了它的哪些部分。作为一般规律,key_len 数据列里的值越小越好。
ref 数据列给出了关联关系中另一个数据表里的数据列的名字。row 数据列是 MySQL 在执行这个查询时预计会从这个数据表里读出的数据行的个数。row 数据列里的所有数字的乘积可以大致了解这个查询需要处理多少组合。
最后,extra 数据列提供了与 JOIN 操作有关的更多信息,比如说,如果 MySQL 在执行这个查询时必须创建一个临时数据表,就会在 extra 列看到 usingtemporary 字样。
延伸阅读1:mysql的管理工具
可以使用命令行工具管理 MySQL 数据库(命令 mysql 和 mysqladmin),也可以从 MySQL 的网站下载图形管理工具 MySQL Administrator, MySQL Query Browser 和 MySQL Workbench。phpMyAdmin是由 php 写成的 MySQ L资料库系统管理程程序,让管理者可用 Web 界面管理 MySQL 资料库。phpMyBackupPro也是由 PHP 写成的,可以透过 Web 界面创建和管理数据库。它可以创建伪 cronjobs,可以用来自动在某个时间或周期备份 MySQL 数据库。另外,还有其他的 GUI 管理工具,例如 mysql-front 以及 ems mysql manager, navicat等等。