MySQL 字符集与比较规则
MySQL 字符集与比较规则
由于 MySQL 客户端与服务端之间通信时需要将字符串编码传输,所以不可避免会产生编码转换
字符集
MySQL 中 utf8 就是 utf8mb3,只使用 1~3 个字节表示字符
utf-8md4 使用 1~4 个字节表示字符
相关参数
MySQL 服务器有以下几个参数与编码有关
字符集相关参数:
character_set_server 服务器级别的字符集
character_set_database 当前数据库的字符集 (如果没有使用 USE 选择数据库,则查看服务器级别的字符集) 只读,无法通过修改改变当前数据库参数
字符集转换相关参数:
character_set_client 服务器会认为客户端发送的请求为这个字符集,会将请求以这个字符集的形式进行解码,获取请求内容
character_set_connection 服务器内部处理请求时使用的字符集,服务器会将客户端的请求以这个字符集的形式进行编码 (如果与处理的数据字符集不同就会再进行一次转换)
character_set_results 服务器会将返回的结果以这个字符集的形式进行编码后返回给客户端
查看命令
MySQL 支持许多字符集,通过以下命令可以查看所有支持的字符集
SHOW CHARACTER SET;
SHOW CHARSET;
其中 Default collation 就是这种字符集的默认比较规则,Maxlen 就是这种字符集表示一个字符最多需要的字节数
查看其他参数
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_connection';
SHOW VARIABLES LIKE 'character_set_results';
设置命令
设置字符集参数
服务器级别:
SET character_set_server 字符集名;
数据库级别:
CREATE DATABASE 数据库名
CHARACTER SET 字符集名称;
ALTER DATABASE 数据库名
CHARACTER SET 字符集名称;
表级别
CREATE TABLE 表名 (列的信息)
CHARACTER SET 字符集名称;
ALTER TABLE 表名
CHARACTER SET 字符集名称;
列级别
CREATE TABLE 表名(列名 字符串类型 CHARACTER SET 字符集名称);
ALTER TABLE 表名 MODIFY 列名 字符串类型 CHARACTER SET 字符集名称 ;
设置字符集转换参数
一般为了方便会将三个参数设置为同一字符集
使用以下命令就可以同时设置三个参数
SET NAMES 字符集名;
当然也可以分开设置
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
比较规则
比较规则有时也称为排序规则,用于在字符串比较大小时规定其顺序的
同一种字符集可以有多种比较规则
命名规则
每一种字符集都可能对应多种比较规则,这些比较规则命名规律为
- 比较规则名称以对应的字符集名称开头
- 中间部分表示主要用于哪种语言
- 后缀有以下几种:
| 后缀 | 全称 | 含义 |
|---|---|---|
| `_ai` | accent insensitive | 不区分重音 |
| `_as` | accent sensitive | 区分重音 |
| `_ci` | case insensitive | 不区分大小写 |
| `_cs` | case sensitive | 区分大小写 |
| `_bin` | binary | 以二进制方式比较 |
示例:
`utf8_spanish_ci` 表示以西班牙语比较,且不区分大小写
相关参数
collation_server 服务器级别的比较规则
collation_database 当前数据库的比较规则 (如果没有使用 USE 选择数据库,则查看服务器级别的比较规则) 只读,无法通过修改改变当前数据库参数
查看命令
将比较规则全部列出来比较多,可以根据对应的字符集进行筛选
SHOW COLLATION;
SHOW COLLATION LIKE 'utf8\_%';
其中 Charset 表示对应的字符集,Default 表示是否为默认比较规则
设置命令
设置比较规则参数
服务器级别:
SET collation_server 比较规则名;
数据库级别:
CREATE DATABASE 数据库名
COLLATE 比较规则名称;
ALTER DATABASE 数据库名
COLLATE 比较规则名称;
表级别
CREATE TABLE 表名 (列的信息)
COLLATE 比较规则名称;
ALTER TABLE 表名
COLLATE 比较规则名称;
列级别
CREATE TABLE 表名(列名 字符串类型 COLLATE 比较规则名称);
ALTER TABLE 表名 MODIFY 列名 字符串类型 COLLATE 比较规则名称 ;
总结
当只修改某个级别的字符集或比较规则时,相同级别对应的比较规则或字符集也会跟着改变为对应的 (默认的)
当创建数据库时如果没有指定字符集和比较规则,则默认使用服务器级别的参数
创建表时没有指定字符集和比较规则,则默认使用表所在数据库的参数
创建列时没有指定字符集和比较规则,则默认使用列所在表的参数
MySQL 字符集与比较规则的更多相关文章
- MySQL字符集与排序规则总结
字符集与排序规则概念 在数据库当中都有字符集和排序规则的概念, 很多开发人员甚至包括有些DBA都会将这个混淆,当然这个情况也有一些情有可原的原因.一来两者本来就是相辅相成,相互依赖关联: 另外一方 ...
- MySql字符集与排序规则详解
前段时间往MySQL中存入emoji表情或生僻字.繁体字时,报错无法添加,研究后发现这是字符集编码的问题,今天就来分析一下各个字符集与排序规则 一.字符集 先说字符,字符是各种文字和符号的总称,包括各 ...
- MySQL字符集及校对规则的理解
阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对 ...
- Mysql字符集与校对规则
字符集是一套字符和编码的集合,校对规则是用于比较字符集的一套规则. 所以字符集有两部分组成字符集合和对应的编码集合.比如说,现在有这几个字符:A B a b, 假设它们对应的编码分别是00, 01, ...
- mysql字符集与比较规则
MySQL有4个级别的字符集和比较规则,分别是: 服务器级别 数据库级别 表级别 列级别 查看服务器级别命令: mysql> SHOW VARIABLES LIKE 'character_set ...
- MySQL 字符集及校验规则
字符集 Mysql 的字符集有4个级别的默认设置:服务器级,数据库级,表级和字段级,客户端交互时,也可以指定字符集 # 字符集:是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国 ...
- Mysql 字符集及排序规则
一.字符集 字符集:就是用来定义字符在数据库中的编码的集合. 常见的字符集:utf8.Unicode.GBK.GB2312(支持中文).ASCCI(不支持中文) 二.字符集排序规则 作者本人用 ...
- mysql字符集问题,及排序规则
字符集问题: 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(E ...
- MySQL 字符集和校验规则工作流程
MySQL 字符集和校验规则工作原理 字符编码相关参数 数据流中的转码过程 校验规则 Tips:字符集和校验规则总是相伴的 一 从简单的建库语句开始 CREATE DATABASE [IF NOT E ...
随机推荐
- 【洛谷5465】[PKUSC2018] 星际穿越(倍增)
点此看题面 大致题意: 给定\(l_{2\sim n}\),其中\(l_i\)表示\([l_i,i-1]\)的所有点与\(i\)之间存在一条长度为\(1\)的双向路径.每次询问给出\(l,r,x\), ...
- Python爬虫大作业
一.题目: 获取并保存目标网站的下图所示的所有英文名,网页转换通过点击more names刷新名字并将各个英文名子目录下,去获取并保存每一个英文名的名字.性别.寓意.简介如下图所示内容红色标记框内的内 ...
- Win32 程序开发入门:一个最简单的Win32程序
一.什么是 Win32 Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境. 这里再介绍下 Win32 Applicatio ...
- 【OCR技术系列之二】文字定位于切割
要做文字识别,第一步要考虑的就是怎么将每一个字符从图片中切割下来,然后才可以送入我们设计好的模型进行字符识别.现在就以下面这张图片为例,说一说最一般的字符切割的步骤是哪些. 当然,我们实际上要识别的图 ...
- 12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统
本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享. 1.引言 Go ...
- PostgreSQL 12 YUM安装
目录 1.创建postgres用户 2.查看操作系统版本 3.配置yum源(对应CentOS 6) 4.安装客户端包 5.安装服务器端包 6.初始化数据库和设置自启动服务 7.postgres用户的b ...
- 【maven】【idea】使用idea的maven进行deploy操作失败,报错:Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project proengine-db-sdk: Failed to deploy artifacts 错误码401
使用idea的maven进行deploy操作失败,报错: Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:- f ...
- c#中xml增删查改
/// <summary> /// xml转list /// </summary> /// <typeparam name="T">目标对象&l ...
- springmvc学习笔记二:重定向,拦截器,参数绑定
Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 返回void 在Contro ...
- CSS3 动画--- CSS3 animation
动画是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果. 语法格式: animation:动画名称 花费时间 运动曲线 何时开始 播放次数 是否反方 ...