3.3 【MySQL】字符集和比较规则的应用

news2024/11/25 22:39:04

3.3.1 各级别的字符集和比较规则

MySQL 有4个级别的字符集和比较规则,分别是:

服务器级别

数据库级别

表级别

列级别

3.3.1.1 服务器级别

MySQL 提供了两个系统变量来表示服务器级别的字符集和比较规则:

系统变量

描述

character_set_server

服务器级别的字符集

collation_server

服务器级别的比较规则

我们看一下这两个系统变量的值:

                           

可以看到在我的计算机中服务器级别默认的字符集是 utf8 ,默认的比较规则是 utf8_general_ci 。

我们可以在启动服务器程序时通过启动选项或者在服务器程序运行过程中使用 SET 语句修改这两个变量的值。比如我们可以在配置文件中这样写:

[server]
character_set_server=gbk
collation_server=gbk_chinese_ci

当服务器启动的时候读取这个配置文件后这两个系统变量的值便修改了。

3.3.1.2 数据库级别

我们在创建和修改数据库的时候可以指定该数据库的字符集和比较规则,具体语法如下:

CREATE DATABASE 数据库名 
[[DEFAULT] CHARACTER SET 字符集名称] 
[[DEFAULT] COLLATE 比较规则名称];
ALTER DATABASE 数据库名 
[[DEFAULT] CHARACTER SET 字符集名称] 
[[DEFAULT] COLLATE 比较规则名称];

如果想查看当前数据库使用的字符集和比较规则,可以查看下面两个系统变量的值(前提是使用 USE 语句选择当前默认数据库,如果没有默认数据库,则变量与相应的服务器级系统变量具有相同的值):

系统变量

描述

character_set_database

当前数据库的字符集

collation_database

当前数据库的比较规则

我们来查看一下刚刚创建的 charset_demo_db 数据库的字符集和比较规则:

                          

可以看到这个 charset_demo_db 数据库的字符集和比较规则就是我们在创建语句中指定的。需要注意的一点是:character_set_database 和 collation_database 这两个系统变量是只读的,我们不能通过修改这两个变量的值而改变当前数据库的字符集和比较规则。

数据库的创建语句中也可以不指定字符集和比较规则,比如这样:

CREATE DATABASE 数据库名;

这样的话将使用服务器级别的字符集和比较规则作为数据库的字符集和比较规则。

3.3.1.3 表级别

我们也可以在创建和修改表的时候指定表的字符集和比较规则,语法如下:

CREATE TABLE 表名 (列的信息) 
[[DEFAULT] CHARACTER SET 字符集名称] 
[COLLATE 比较规则名称]]

ALTER TABLE 表名 
[[DEFAULT] CHARACTER SET 字符集名称] 
[COLLATE 比较规则名称]

3.3.1.4 列级别

需要注意的是,对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则。我们在创建和修改列定义的时候可以指定该列的字符集和比较规则,语法如下:

CREATE TABLE 表名( 
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称], 
其他列...);
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

3.3.1.5 仅修改字符集或仅修改比较规则

由于字符集和比较规则是互相有联系的,如果我们只修改了字符集,比较规则也会跟着变化,如果只修改了比较规则,字符集也会跟着变化,具体规则如下:

只修改字符集,则比较规则将变为修改后的字符集默认的比较规则。

只修改比较规则,则字符集将变为修改后的比较规则对应的字符集。

不论哪个级别的字符集和比较规则,这两条规则都适用,我们以服务器级别的字符集和比较规则为例来看一下详细过程:

只修改字符集,则比较规则将变为修改后的字符集默认的比较规则。

                               

我们只修改了 character_set_server 的值为 gb2312 , collation_server 的值自动变为了gb2312_chinese_ci 。

只修改比较规则,则字符集将变为修改后的比较规则对应的字符集。

                              

我们只修改了 collation_server 的值为 utf8_general_ci , character_set_server 的值自动变为了utf8 。

3.3.1.6 各级别字符集和比较规则小结

如果创建或修改列时没有显式的指定字符集和比较规则,则该列默认用表的字符集和比较规则

如果创建或修改表时没有显式的指定字符集和比较规则,则该表默认用数据库的字符集和比较规则

如果创建或修改数据库时没有显式的指定字符集和比较规则,则该数据库默认用服务器的字符集和比较规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VIRTIO-BLK代码分析(4)VIRTIO设备中断的注入

VIRTIO设备中断包括vq中断和config中断。Vq中断用于通知Guest已完成数据的处理,虚拟机中可以完成IO请求。Vq中断的模拟是通过irqfd实现的,它将虚拟机中断与irqfd关联上(KVM_SET_GSI_ROUTING和KVM_IRQFD),当虚拟机中访问…

Centos7设置设置时间与windows同步

CentOS7设置时间与windows同步 使用ntp使CentOS服务器的系统时间与机器时间同步于windows服务器centOS机器安装ntpwindows安装ntp同步时间 使用ntp使CentOS服务器的系统时间与机器时间同步于windows服务器 思路是将windows服务器作为ntp服务端,centOS服务器作为ntp…

border-image和border-radius一起使用border-radius不起作用

关于border-image和border-radius一起使用border-radius不起作用 解决方案:最外层父盒子假如叫A添加 background为border-image的值,以及添加 boder-radius。 再添加一层父盒子假如叫B 添加padding值为border的宽度。 C和D都是子盒子 单独设置其border-…

展厅显示大屏怎么选,展厅使用哪种显示大屏好?

近年来,随着信息化科技快速发展,越来越多的企事业单位的展厅都会采用显示大屏来展现各种信息。那么,展厅显示大屏怎么选,哪种显示大屏更好?接下来,小灰从专业角度,用通俗易懂的文字为大家逐一分…

视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…

打造低碳社区,践行环保理念

在城市内推行低碳经济,实现城市的低碳排放,甚至是零碳排放。而社区的结构是城市结构的细胞,社区结构与密度对城市能源及二氧化碳排放起了关键的作用。所以要想实现低碳城市建设,改变原有能源结构,改造低碳社区是第一大…

第 2 章 线性表 (线性表的单链表存储结构实现)

1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #d…

武汉凯迪正大—接触电阻测试仪器

一、凯迪正大智能回路电阻测试仪产品概述 KDHL-100A操作面板采用人体工学设计,符合操作习惯,采用高频开关电源和数字电路技术,适用于开关控制设备回路电阻的测量。测试电流采用国家标准推荐的直流100A。可在直流100A的情况下直接测得回路电阻…

图像色彩空间的改变

图像色彩空间的改变 OpenCV中有150多种颜鱼空间转换方法。 最广泛使用的转换方法有两种, BGR →Gray 和 BGR→HSV。 cv.cvtColor(input_image,flag) 参数: input_image:进行颜色空间转换的图像. flag:转换类型 cv.COLOR_BGR2GRAY : BGR → GRAY cv.…

恒运资本:沪指震荡跌0.34%,医药、酿酒等板块走低,光刻胶概念等活跃

6日早盘,两市股指再度走低,创业板指跌近1%;成交额有所下降,北向资金小幅净流出。 到午间收盘,沪指跌0.34%报3143.62点,深成指跌0.68%,创业板指跌0.89%,上证50指数跌0.51%&#xff1…

运行Android Automotive模拟器

在windows系统中安装MobaXterm MobaXterm free Xserver and tabbed SSH client for Windows 运行MobaXterm,在宿主机中进入编译后的源码根目录并执行如下命令,若未编译,请参照如下链接,编译车机模拟器Android Automotive编译_IT…

Linux之DNS域名解析服务

目录 Linux之DNS域名解析服务 概述 产生原因 作用 连接方式 因特网的域名结构 拓扑 分类 域名服务器类型 ​编辑 DNS域名解析过程 分类 解析图 搭建DNS域名解析服务器 概述 安装软件 bind服务中三个关键文件 主配置文件分析 一般需要修改三部分:…

ubuntu 20.04 设置 authorized_keys 让 VS Code ssh 远程免密连接

相关文章 VSCode SSH 连接远程ubuntu Linux 主机 前言 前面记录了 VS Code 可以通过 SSH 远程连接 ubuntu Linux 主机,比如代码放在远程 ubuntu 主机上, windows 端 VS Code 通过 ssh 远程连接 ubuntu,并打开 远程主机上的 代码 如果不设置…

手游折扣平台app排行,打折手游平台排行

随着手游市场的不断发展,出现了越来越多的手游折扣平台。在这些平台中,有些提供各种各样的手机游戏,并提供丰厚的福利。本文将向您介绍手游折扣平台app排行,打折手游平台排行。对于目前的游戏来说,无非是哪里玩更划算&…

Eclipse安装及配置tomcat

1.Eclipse安装 1.java -version检查一下有没有jdk 如没有则下载 下载路径:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 2.Eclipse下载链接:https://www.eclipse.org/downloads/ 3.安装完之后就启动你会看见一个欢迎页面&am…

网络电视盒子哪个好?数码老贾横评整理电视盒子推荐

大家好,我是老贾,今天测评的主题是网络电视盒子哪个好,为让结果更加真实客观,我购入了市面上最热销的12款电视盒子,花费14天时间详细对比芯片、内存、用料、系统、广告等等方面,最终整理了五款表现最佳的电…

摘要-签名-PKI-访问控制-DOS-欺骗技术

摘要-签名-PKI-访问控制-DOS-欺骗技术 信息摘要数字签名 信息摘要 信息摘要通过哈希函数生成的 信息摘要保证数据的完整性 MD5 和 SHA-1 数字签名 唯一确定发送方 基于非对称加密技术(公钥和私钥技术)

Android Framework——进程间通讯学习,从Binder使用看起

前言 Binder 是安卓中非常重要的进程间通讯工具,通过Binder 安卓在ServiceManager中对外提供了一系列的服务。学习Binder,将很好地为我们学习framework开个好头。 Android 使用多进程 Android 开启进程方式很简单,在AndoridMenifest中给四…

ubuntu server 更改时区:上海

1. 打开终端,在命令行中以超级用户或具有sudo权限的用户身份运行以下命令: sudo dpkg-reconfigure tzdata 这会打开一个对话框,用于选择系统的时区设置。 2. 在对话框中,使用上下箭头键在地区列表中选择"Asia"&#x…

蓝桥杯打卡Day4

文章目录 首字母大写字符串转换整数 一、首字母大写IO链接 本题思路:本题就是语法题 #include <bits/stdc.h>int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::string str;std::getline(std::cin,str);for(int i0;i&…