[MySQL]数据库原理2——喵喵期末不挂科

希望你开心,希望你健康,希望你幸福,希望你点赞!

最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要!

目录

前言

认识字符集和校对原则

[MySQL 5.5支持的字符集和校对原则](#MySQL 5.5支持的字符集和校对原则 "#MySQL%205.5%E6%94%AF%E6%8C%81%E7%9A%84%E5%AD%97%E7%AC%A6%E9%9B%86%E5%92%8C%E6%A0%A1%E5%AF%B9%E5%8E%9F%E5%88%99")

常用字符集和校对原则

确定字符集和校对原则

描述字符集的系统变量

MySQL用下列的系统变量描述字符集。

字符集的依存关系

修改默认字符集

修改默认字符集

使用MySQL字符集时的建议

预习建立数据库和表

配套练习

总结


前言

MySQL能够支持39种字符集和127个校对原则。

细化为4个层次:服务器(Server)、数据库(DataBase)、数据表(Table)和连接层(Connection)。

MySQL服务器默认的字符集是latin1,如果不进行设置,那么连接层级、客户端级和结果返回级、数据库级、表级、字段级都默认使用latin1字符集。

在向表录入中文数据、查询包括中文字符的数据时,会出现类似"?"这样的乱码现象。

在创建存储过程或存储函数时,也经常由于字符集的不统一出现错误。

本任务从认识字符集和校对原则着手,学习MySQL支持的字符集和校对原则。

着重介绍latin1、UTF-8和gb2312字符集。

通过认识描述字符集的系统变量,学习掌握修改默认字符集的方法。

介绍在实际应用中,如何选择合适的字符集。


认识字符集和校对原则

字符(Character)是指人类语言中最小的表义符号。例如'A'、 'B'等。

给定一系列字符,并给每个字符指定一个数值来进行表示,这个数值就是对应字符的编码(Encoding)。

给定一系列字符,并给每个字符进行编码后,所有字符和编码对组成的集合就是字符集(Character set)。比如:ASSII码。

字符校对原则(Collation)是指在同一字符集内字符之间的比较规则。

​编辑

确定字符序后,才能在一个字符集上定义什么是等价的字符(a是否等价A),以及字符之间的大小关系。

每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符校对原则,其中有一个是默认字符校对原则(Default Collation)。

MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如,在字符序"utf8_general_ci"下,字符'a'和 'A'是等价的。


MySQL 5.5支持的字符集和校对原则

MySQL 5.5服务器能够支持39种字符集和127个校对原则。

任何一个给定的字符集至少有一个校对原则,也可能有几个校对原则。

可以使用SHOW命令列出可用的字符集及对应校对原则。如:

mysql >SHOW CHARACTER SET;

mysql> SHOW COLLATION LIKE 'latin1%';


常用字符集和校对原则

Latin1

系统启动时默认的字符集,是一个8位字符集,字符集名称为ISO 8859-1Latin 1,也简称为ISO Latin-1。

它把位于128~255之间的字符用于拉丁字母表中特殊语言字符的编码,也因此而得名。
UTF-8(8-bit Unicode Transformation Format)

被称为通用转换格式,是针对Unicode字符的一种变长字符编码,又称万国码。

对英文使用8位(即1个字节),中文使用24位(3个字节)来编码。

UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。

UTF-8编码的文字可以在各国支持UTF-8字符集的浏览器上显示。
gb 2312

是简体中文字符集,GBK是对GB 2312的扩展,其校对原则是分别为gb2312_chinese_ci、gbk_chinese_ci。

GBK的文字编码不论中、英文字符均使用双字节表示。GBK通用性比UTF-8差,占用的数据库较小。

GBK、GB 2312与UTF-8之间都必须通过Unicode编码才能相互转换。

对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。


确定字符集和校对原则

描述字符集的系统变量

MySQL对于字符集的支持细化到4个层次:服务器(Server)、数据库(DataBase)、数据表(Table)和连接(Connection)。

MySQL对于字符集的指定可以细化到一个数据库、一张表和一列。

MySQL用下列的系统变量描述字符集。

character_set_server和collation_server :这两个变量是服务器的字符集,默认的内部操作字符集。

character_set_client:客户端来源数据使用的字符集,这个变量用来决定MySQL怎么解释客户端发到服务器的SQL命令文字。

character_set_connection和collation_connection :连接层字符集。这两个变量用来决定MySQL怎么处理客户端发来的SQL命令。

character_set_results:查询结果字符集,当SQL有结果返回的时候,这个变量用来决定发给客户端的结果中文字量的编码。

character_set_database和collation_database :当前选中数据库的默认字符集,create database命令有两个参数可以用来设置数据库的字符集和比较规则。character_set_system:系统元数据的字符集,数据库、表和列的定义都是用的这个字符集。它有一个定值,是UTF-8 。

以"collation_"开头的同上面对应的变量,用来描述字符集校对原则。

有的字符集概念并没有一个系统变量表示,如:

表所使用的字符集,在创建表的语句中指定,作为该表中列字体集的默认值。

列所使用的字符集,决定本列的文字数据的存储编码。列的比较规则比collation_connection高。也就是说,MySQL会把SQL中的文字直接量转成列的字符集后再与列的文字数据比较。


字符集的依存关系

​编辑

MySQL默认的服务器级的字符集,决定客户端、连接级和结果级的字符集。

服务器级的字符集决定数据库的字符集。

数据库的字符集决定表的字符集。

表的字符集决定字段的字符集。


MySQL默认字符集

编译MySQL时,指定了一个默认的字符集,这个字符集是"latin1"。

安装MySQL时,可以在配置文件(my.ini)中重新指定默认字符集。

启动MySQL时,也可在命令行参数中重新指定默认字符集。

默认字符集最终被应用于character_set_server ,再被应用于其下级字符集。


修改默认字符集

修改MySQL的my.ini(C:\Program Files \MySQL\MySQL Server 5.5)文件中的字符集

查找[mysql]键值,在下面加上一行: default-character-set=utf8

修改保存后,可用语句查看。

sql 复制代码
   mysql> SHOW VARIABLES LIKE 'character%

修改默认字符集

使用MySQL的命令修改字符集。

ini 复制代码
 mysql> SET character_set_client = utf8 ;

  mysql> SET character_set_connection = utf8;

  mysql> SET character_set_database = utf8 ;

  mysql> SET character_set_results = utf8 ;

  mysql> SET character_set_server = utf8 ;

使用MySQL字符集时的建议

建立数据库、表和进行数据库操作时,尽量显式指出使用的字符集,而不是依赖于默认设置。

数据库和连接字符集都使用latin1时,大部分情况下都可以解决乱码问题,但无法以字符为单位来进行SQL操作,因此使用UTF-8更好。

注意服务器级、结果级、客户端级、连接级、数据库级、表级的字符集的统一,当数据库级的字符集设置为UTF-8时,表级与字段级的字符集也是UTF-8。


预习建立数据库和表

建立数据库和表是指在计算机系统中创建一个存储数据的地方,并在其中创建表格来组织和管理数据。数据库是一个可以被多个用户同时访问和操作的数据存储系统,而表则是数据库中的一个结构化数据容器。下面将介绍如何建立数据库和表。

首先,选择一个适合的数据库管理系统(DBMS),如MySQL、Oracle或SQL Server等。这些DBMS提供了丰富的功能和工具来管理和操作数据库。

接下来,通过运行DBMS提供的命令或工具来创建数据库。一般情况下,可以使用CREATE DATABASE语句来创建数据库,并指定数据库的名称。例如,CREATE DATABASE mydatabase;创建一个名为mydatabase的数据库。

创建数据库之后,就可以在其中创建表格了。表格用于存储数据,并且有一定的结构和规则。使用CREATE TABLE语句可以创建一个新的表格。在CREATE TABLE语句中,需要指定表格的名称和列的信息。每个列都有一个名称和数据类型。例如,CREATE TABLE customers (id INT, name VARCHAR(50), email VARCHAR(100));将创建一个名为customers的表格,并包含id、name和email三列,分别是整数和两个字符串。

在创建表格之后,可以使用INSERT语句来向表格中插入数据。INSERT语句可以插入一条或多条数据。例如,INSERT INTO customers (id, name, email) VALUES (1, 'John', 'john@example.com');将向customers表格中插入一条数据。

创建数据库和表格后,就可以使用SELECT语句来查询数据,使用UPDATE语句来更新数据,使用DELETE语句来删除数据等。这些语句可以通过DBMS提供的命令行界面或图形化界面来执行。

总之,建立数据库和表是管理和组织数据的重要步骤。通过选择合适的DBMS,并使用相应的命令和工具,可以轻松地创建数据库和表格,并对其中的数据进行管理和操作。


配套练习

一、mysql注释:

mysql注释符有三种:1、#...2、-- ...3、/.../

二、启动mysql服务器(startup)à打开命令窗口clientà输入:

2.1 mysql >SHOW CHARACTER SET;//显示所有字符集

mysql> SHOW COLLATION LIKE 'latin1%';//显示以latin1开头的校对(Collation)规则:

2.2. 修改MySQL的配置文件my.ini(自己安装的mysql路径)文件中的字符集

查找[mysql]键值,在下面加上一行: default-character-set=utf8

修改保存后,可用语句查看。

mysql> SHOW VARIABLES LIKE 'character%';

重新启动服务器后再次查看字符集(先shutdown再startup)

2.3使用MySQL的命令修改字符集,修改后可用show variables like 'character%';查看。

mysql> SET character_set_client = utf8 ;

mysql> SET character_set_connection = utf8;

mysql> SET character_set_database = utf8 ;

mysql> SET character_set_results = utf8 ;

mysql> SET character_set_server = utf8 ;

三、解决发送前的乱码

MySQL> SET NAMES 'UTF8 ';

与这3个语句等价:

mysql> SET character_set_client =UTF8;

mysql> SET character_set_results = UTF8;

mysql> SET character_set_connection =UTF8;

四、修改MySQL的my.ini文件中,将默认字符集修改为gb2312。

提前预热

以下是MySQL的简单代码示例:

先看看,喵~

连接到MySQL数据库

ini 复制代码
import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword"
)

print(mydb)

创建数据库

ini 复制代码
import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE mydatabase")

创建表

ini 复制代码
import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")

插入数据

ini 复制代码
import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")

mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "record inserted.")

总结

MySQL能够支持39种字符集和127个校对原则。

细化为4个层次:服务器(Server)、数据库(DataBase)、数据表(Table)和连接层(Connection)。

MySQL服务器默认的字符集是latin1,如果不进行设置,那么连接层级、客户端级和结果返回级、数据库级、表级、字段级都默认使用latin1字符集。

在向表录入中文数据、查询包括中文字符的数据时,会出现类似"?"这样的乱码现象。

在创建存储过程或存储函数时,也经常由于字符集的不统一出现错误。

本任务从认识字符集和校对原则着手,学习MySQL支持的字符集和校对原则。

着重介绍latin1、UTF-8和gb2312字符集。

通过认识描述字符集的系统变量,学习掌握修改默认字符集的方法。

介绍在实际应用中,如何选择合适的字符集。


希望你开心,希望你健康,希望你幸福,希望你点赞!

最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要!

​编辑

相关推荐
大王只是带我巡了个山29 分钟前
优化 OR 条件过多导致的查询超时
数据库·mysql·join·or 优化·or 超时·查询超时
gma9991 小时前
MySQL程序
数据库·mysql
神秘的土鸡1 小时前
Linux中Docker容器构建MariaDB数据库教程
linux·运维·服务器·数据库·docker·mariadb
汪公子4921 小时前
使用k8s搭建mariadb+nginx+wordpress
数据库·nginx·mariadb
Java__攻城狮1 小时前
navicat无法连接远程mysql数据库1130报错的解决方法
数据库·mysql
爬山算法1 小时前
Oracle(129) 如何使用闪回归档(Flashback Archive)?
数据库·oracle
程序员大金2 小时前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
Kk.6162 小时前
SQL编程题复习(24/9/20)
数据库·sql·pta考试·专本贯通
程序员大金2 小时前
基于SpringBoot的旅游管理系统
java·vue.js·spring boot·后端·mysql·spring·旅游
Yz98762 小时前
Hadoop-MapReduce的 原理 | 块和片 | Shuffle 过程 | Combiner
大数据·数据库·数据仓库·hadoop·mapreduce·big data