超新手入门(7) 字元集与资料库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题;如果处理的资料是文字的话,就会面临世界上各种不同语言的问题。以资料库来说,它必须正确的储存各种不同语言的文字,也就是一个资料库中,有可能同时储存繁体和简体中文、法文等不同语言的文字。

任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题;如果处理的资料是文字的话,就会面临世界上各种不同语言的问题。以资料库来说,它必须正确的储存各种不同语言的文字,也就是一个资料库中,有可能同时储存繁体和简体中文、法文等不同语言的文字。


电脑在处理文字资料大多是使用一个「编码」来表示某一个字,对MySQL资料库来说,为了要处理不同语言的文字,它使用一套编码来处理一种语言的文字,称为「字元集、character set」。以英文字母来说,每一个字母都有一个编码,例如A=65、B=66、C=67。


MySQL可以依照你的需要为资料库设定不同的字元集:

image.png

Collation指的是在一个字元集中,所有字元的大小排序规则。以英文字母来说,我们会依照A到Z的顺序当成大小的顺序,小写的字母也是一样的。这样的大小顺序是依照编码的大小来决定的,MySQL把它称为「binary collation」。


可是在真实的世界中,大小顺序却不是这么单纯,有时候你会把大小写的英文字母当成是一样的,例如大写的A和小写的a。在这种情况下,大写和小写的字母会被当成是一样的大小,然后再依照编码来决定,例如大写A的编码比小写a的编码小。MySQL把这样的方式称为「case-insensitive collation」。

image.png

在决定大小顺序的时候,如果只有考虑字母大小写因素的话,那还不算是太复杂的。如果再考虑各种不同语言特性的话,在决定大小顺序的时候就会变得很复杂。以繁体中文来说,它是没有区分大小写的,而且一个中文字会包含一个以上的位元组,其它的语言也都会有类似的情况。


1.1 Character Set

MySQL资料库把各种不同字元集的编码资料纪录在系统资料库中,你可以使用下列的指令查询MySQL资料库支援的字元集资讯:

SHOW CHARACTER SET

执行上列的查询指令后可以得到下列的结果:

image.png


1.2 COLLATION

MySQL除了支援各种不同的字元集,让资料库可以储存不同语言的文字外,每一种字元集都可以依照实际需要,搭配不同的Collation设定。你可以使用下列的指令查询MySQL支援的Collation资讯:

SHOW COLLATION

执行上列的查询指令后可以得到下列的结果:

image.png

你也可以使用类似「WHERE」子句中的条件设定,查询某一种字元集支援的Collation资讯:

image.png

你可以从Collation名称分辨出排序的准则:

image.png


2 资料库

资料库(Database)是用来保存各种资料元件的容器,在安装好MySQL资料库伺服器软体后,就可以依照自己的需求建立资料库,MySQL对于资料库的数量并没有限制:

image.png

每一个MySQL资料库伺服器软体都会使用一个储存资料的资料夹,称为「data directory」。在这个资料夹下,每建立一个资料库,MySQL都会建立一个资料夹,称为「资料库资料夹、database directory」,一个资料库包含的档案就会放在各自的资料库资料夹中:

image.png

注:使用SHOW VARIABLES LIKE 'datadir'叙述,可以查询MySQL资料库伺服器使用的资料库资料夹。

因为一个资料库会是档案系统中的一个资料夹,所以你要特别留意下列的特性:

  • 虽然MySQL对于资料库的数量并没有限制,可是你要注意MySQL资料库伺服器软体所安装的作业系统,它对于资料夹与档案大小的限制。
  • MySQL使用资料库名称作为资料库资料夹的名称,所以你要特别注意大小写的问题。在资料夹名称不分大小写的作业系统(例如Windows),资料库名称「MyDB」和「mydb」是一样的;可是在资料夹名称会区分大小写的作业系统(例如Linux),资料库名称「MyDB」和「mydb」就不一样了。
  • 每一个资料库资料夹中都有一个特别的档案,档案名称是「db.opt」,这个档案的内容是资料库的字元集与collation设定。

注:MySQL把「DATABASE」与「SCHEMA」当成是一样的,所有你在后续使用的指令,都可以把「DATABASE」换成「SCHEMA」。


2.1 建立资料库

下列是建立资料库的语法:

image.png

在你执行新增资料库的指令以后,MySQL会使用你指定的资料库名称建立一个资料库资料夹:

image.png

如果你指定的资料库名称已经存在了,MySQL会产生一个错误讯息:

image.png

为了避免上列的错误,你可以在建立资料库的时候加入「IF NOT EXISTS」,如果你指定的资料库名称不存在,同样会建立新的资料库;如果已经存在,MySQL只会产生警告讯息:

image.png

你可以在建立资料库的时候指定资料库预设的字元集与collation,如果没有指定的话,就会使用MySQL伺服器预设的设定:

image.png

注:如果没有修改过MySQL设定的话,预设的字元集是「latin1」,Collation是「latin1_swedish_ci」。

建立资料库的时候指定字元集与collation会有一些不同的组合,例如下列只有指定字元集的话,MySQL会使用你指定字元集的预设collation:

image.png

另外一种是只有使用「COLLATE」指定collation,MySQL会使用你指定collation所属的字元集:

image.png

注:建立资料库的时候,不管你有没有指定,资料库都会有预设的字元集与collation。以后在这个资料库建立的表格,都会使用资料库预设的字元集与collation。


2.2 修改资料库

建立资料库以后,你唯一能执行的修改是资料库预设的字元集与collation。下列是修改资料库设定的语法:

image.png

下列的叙述执行修改资料库预设的字元集与collation。在修改的时候,如果只有指定字元或只有指定collation的话,设定的规则与建立资料库一样:

image.png

注:修改资料库的字元集是或Collation,并不会影响原来已经存在的表格。


2.3 删除资料库

下列是删除资料库的语法:

image.png

如果在删除资料库的叙述中指定的资料库名称不存在,MySQL会产生一个错误讯息:

image.png

为了避免上列的错误,你可以在删除资料库的时候,加入「IF EXISTS」指令,如果你指定的资料库名称存在,同样会删除指定的资料库;如果不存在,MySQL只会产生警告讯息:

image.png

注:执行删除资料库的叙述,MySQL不会再跟你确认是否删除资料库,而是直接删除;删除资料库以后,表示资料库资料夹也会从档案系统中删除,除非你另外还有这个资料库的备份,否则原来在资料库中的所有资料就全部消失了。


2.4 取得资料库资讯

MySQL提供「SHOW」指定让你取得跟资料库相关的资讯,执行下列的指令可以取得MySQL伺服器中所有资料库的名称:

image.png

你也可以执行下列的指令取得建立资料库的叙述:

image.png

MySQL资料库伺服器有一个很重要的资料库,名称为「information_schema」,这个资料库通常会把它称为「系统资料库」,资料库中储存伺服器所有重要的资讯。跟资料库相关的资讯储存在「SCHEMATA」表格中,所以你可以使用查询叙述取得所有资料库的相关资讯:

image.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
NoSQL 数据可视化 Docker
这是一份简单到没朋友的上手图数据库的图文教程
本文是一份极度友好,你即便只会一个开机操作、不懂任何数据库的人,也能通过学习本文查询到你想要的图关系。
39 0
|
9月前
|
小程序
分享几个免费设计生成及参考工具 (第五期)
今天来给大家分享几个国外免费的PNG图片素材网站
|
10月前
|
人工智能 小程序 搜索推荐
分享几个免费设计生成及参考工具 (第三期)
今天来给大家分享几个国外免费的设计生成工具
|
10月前
|
关系型数据库 MySQL 数据库
MySQL基础篇——MySQL数据库的介绍、下载、安装【文末送书】(二)
MySQL基础篇——MySQL数据库的介绍、下载、安装【文末送书】
65 0
|
10月前
|
SQL 存储 Oracle
MySQL基础篇——MySQL数据库的介绍、下载、安装【文末送书】(一)
MySQL基础篇——MySQL数据库的介绍、下载、安装【文末送书】
95 0
|
Linux 数据安全/隐私保护
阿里云体验实验室-6:Linux指令入门-文件与权限
阿里云体验实验室-6:Linux指令入门-文件与权限
134 0
|
数据可视化 搜索推荐
如何建立你的阅读管理系统?以 FlowUs 和 Notion 等笔记软件为例
在《FlowUs 生态:如何建立你的书籍管理系统?》中,我事实上主要介绍了导入书籍信息的几种路径。今天,在这篇文章的基础上,我将继续介绍如何使用 Notion 类工具建立阅读管理系统。 注释:本文方法对于 FlowUs 、Notion 等笔记软件均通用。本文以 FlowUs 为例。
218 0
如何建立你的阅读管理系统?以 FlowUs 和 Notion 等笔记软件为例
|
存储 关系型数据库 MySQL
CMU 15-445 数据库课程第四课文字版 - 存储2(中)
CMU 15-445 数据库课程第四课文字版 - 存储2(中)
CMU 15-445 数据库课程第四课文字版 - 存储2(中)
|
存储 NoSQL OLAP
CMU 15-445 数据库课程第四课文字版 - 存储2(下)
CMU 15-445 数据库课程第四课文字版 - 存储2(下)
CMU 15-445 数据库课程第四课文字版 - 存储2(下)
|
弹性计算 Linux C语言
冬季实战营第二期学习报告4:Linux指令入门-文件与权限
本教程介绍Linux系统中常用的文件目录管理和文件权限管理命令。