mysql默认字符集和排序_MySQL字符集和排序规则

MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示:

18d90789ee1fc4ad29d0f3e676d79508.png

我觉得这里有必要解释下字符集和排序规则这两个概念。

字符集

说到字符集,需要先提下字符、字符集和字符编码这几个词的含义。

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。

字符编码是把字符集中的字符编码为特定的二进制数,以便在计算机中存储。编码方式一般就是对二维表的横纵坐标进行变换的算法。一般都比较简单,直接把横纵坐标拼一起就完事了。后来随着字符集的不断扩大,为了节省存储空间,才出现了各种各样的算法。

字符集和字符编码一般都是成对出现的,如ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码,以后统称为编码。Unicode比较特殊,后面细说。

在MySQL中需要注意的utf8和utf8mb4这两种字符集的区别,utf-8编码格式我们经常会碰到,但是这里的utf8却不是指utf-8这种编码格式,那么又为啥会出现utf8mb4这种字符集呢?

据说MySQL一开始没有utf8mb4这个字符集,因为utf8只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节,这就造成UTF-8编码下的一些字符无法保存到数据库中,为了修复这个bug而出现了utf8mb4这种字符集。

三个字节的UTF-8最大能编码的Unicode字符是0xFFFF,也就是Unicode中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的Unicode字符,都无法使用MySQL原有的utf8字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji表情(Emoji是一种特殊的Unicode编码,常见于ios和android手机上),和一些不常用的汉字,以及任何新增的Unicode字符等等。

如果要在MySQL中保存4字节长度的UTF-8字符,就需要使用utf8mb4编码,但是要注意只有5.5.3版本以后的MySQL才支持(查看版本命令: select version())。为了获取更好的兼容性,建议使用utf8mb4而非utf8. 对于CHAR类型数据,utf8mb4会多消耗一些空间,但根据 MySQL官方建议,可以使用VARCHAR替代CHAR。

扩展:char是一种固定长度的类型,varchar则是一种可变长度的类型(因为char长度固定,方便程序的存储与查找,所以char类型存取速度优于varchar,即以空间换效率)

排序规则

MySQL中常用的排序规则(这里以utf8字符集为例)主要有:utf8_general_ci、utf8_general_cs、utf8_unicode_ci等。

这里需要注意下ci和cs的区别:

ci的完整英文是'Case Insensitive', 即“大小写不敏感”,a和A会在字符判断中会被当做一样的;

cs的完整英文是‘Case Sensitive’,即“大小写敏感”,a 和 A 会有区分;

比如下面这个查询:

# 假设数据库中SC_Teacher表存在一条数据,其中TeacherName字段的值为 "A"

select * from SC_Teacher where TeacherName = 'a'

-- 如果数据库使用的是utf8_general_ci排序规则, 下面的查询是可以查询到这条数据

-- 如果数据库使用的是utf8_general_cs排序规则, 下面的查询是查询不到这条数据

正因为这个性质,导致utf8_general_ci的查询速度比utf8_general_cs快,(纯属个人推测,没有实际依据)

utf8_general_ci: 查询时不区分大小写匹配

utf8_general_cs: 查询时区分大小写匹配

utf8_bin: 字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容,与utf8_general_cs一样,区分大小写

utf8_unicode_ci : 和utf8_general_ci一样,不区分大小写

当前utf8_general_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt、Tatar、Bashkir和Mari。

utf8_general_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。

utf8_general_ci是一个遗留的校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_general_ci的校对规则相比,比较正确性较差)。

例如,使用utf8_general_ci和utf8_unicode_ci两种 校对规则下面的比较相等:

Ä = A

Ö = O

Ü = U

两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:

ß = s

但是,对于utf8_unicode_ci下面等式成立:

ß = ss

对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。

utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

简短总结

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。

utf8_general_ci校对速度快,但准确度稍差。

utf8_unicode_ci准确度高,但校对速度稍慢。

如果你的应用有德语、法语或者俄语,请一定使用utf8_unicode_ci。一般用utf8_general_ci就够了,到现在也没发现问题。

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

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

相关文章

图形驱动程序和显卡驱动什么区别_以后你的手机也需要单独安装显卡驱动程序了...

在桌面平台制造商通常会定期发布显卡驱动优化和提高性能,对于多数用户来说安装显卡驱动应该是很平常的事。不过在智能手机方面还不需要安装额外的驱动程序,因为制造商通常会通过每年的安卓系统更新来发布新版驱动。有趣的是从明年开始我们的智能手机也要…

有向加权图 最大弱连通分支_开盘引来大涨,当下股市最大的风险是它?

何为昨天的大涨定性?昨天的大涨,上午的加权量能水平达到了2921亿元,一个非常健康的温和放量状态;下午的加权量能水平快速下降到2242亿元的水平,这是略高于五日均量的量能水平;大幅高开,集合竞价…

axure文本框提示文字_Axure教程:一个中继器实现密码验证

本文给大家介绍用一个中继器实现axure登录时账号密码验证效果,一起来看看~实现效果如下图:工具/原料:账号文本框密码文本框登录按钮中继器记录密码的文本标签(隐藏)提示框(隐藏)验证按钮(隐藏)方法/步骤步骤1设置中继器:新增列acc…

深度学习 autoencoder_笔记:李淼博士-基于模仿学习的机器人抓取与操控

说明:本文是Techbeat平台上李淼博士的讲座:“基于模仿学习的机器人抓取与操控”的总结笔记。原视频:TechBeat - 让AI大有可为​www.techbeat.net视频介绍:近四十年来,研究人员对机器人抓取的研究逐渐深入,涉…

linux临时挂载别的文件目录_linux基础05:linux系统目录有哪些?命令行界面如何切换目录?...

我们安装好linux系统后,linux系统也会像windows系统一样,自动生成很多的文件和目录,这些目录都包含了不同的含义。下面,我们就来介绍一下这些目录都代表着什么?以及,在命令行界面,我们如何在不同…

抽象方法可以有方法体_什么方法可以祛斑?祛斑的方法有哪些?

现在是一个看脸的时代,可能不那么准确,但是也说明了人们对于美好脸蛋的追求。完美的脸蛋必定是光滑白皙没有瑕疵的,而有了色斑就会损害整个人的颜值。祛斑的方法有哪些?若是您正深受长斑的烦恼,小编专门寻找了一些简单有效的祛斑…

炫界 (978) -(建工发现应用克隆漏)_除了DMA,这些漏损点检测与漏损区域识别技术你知道么?...

漏损问题在给水管网中是普遍存在且难以避免的。据《2018年城市供水统计年鉴》显示,载入年鉴的各城市在2017年的管网漏损总量超过60亿m3,平均漏损率为14.56%,这与“水十条”明确规定的控漏目标相比仍存有差距。与此同时,居高不下的…

go语言 mysql卡死_一次mysql死锁的排查过程-Go语言中文社区

一次mysql死锁的排查过程一、背景17号晚上要吃饭了,看旁边的妹子和佐哥还在调代码,就问了下什么问题啊,还在弄,妹子说,在测试环境测试给用户并发发送卡券时,出现了死锁,但看代码没有死锁&#x…

怎么格式化电脑_U盘格式化后数据能恢复吗?人人都能学会的恢复方法!

获取专业数据恢复软件:专注硬盘U盘误删文件数据恢复软件免费下载​dl-next.aunbox.cn数据恢复官网:嗨格式数据恢复大师官网 - 专业U盘/电脑/硬盘数据恢复软件_免费下载​huifu.hgs.cnU盘格式化后数据能恢复吗?U盘在我们生活中算是比较常用的数…

java 运算符_详解Java表达式与运算符

课程导言【变量的赋值与计算都离不开表达式,表达式的运算依赖于变量、常量和运算符。本节课讨论Java的表达式的构成、常量的定义、运算符的分类及应用。通过本课的学习你将掌握运用表达式和运算符完成变量赋值、条件判断、数学运算、逻辑运算等功能操作】在讲述课程…

将你一张表的值覆盖_精准度可达亚米级,山东“北斗一张网”向社会免费开放...

齐鲁晚报齐鲁壹点记者张阿凤通讯员苏彬8月21日,山东省北斗卫星导航定位基准站网(以下简称“北斗一张网”)推广应用座谈会在济南举行。“北斗一张网”自2019年8月建成后,现已免费向社会提供实时、动态、高精度的卫星导航定位基础服务,在自然资…

okhttp 工具类_日语学习工具推荐,小白必备!

有很多同学问我,有没有好用的日语学习工具?当然有啦~这些学习工具大概分为辞典类、翻译类、日语知识类等等。今天呢,在自身使用的工具里挑选了下面8个学习工具网站,适合各个学习阶段,从日语初级到精通,它们…

des和aes相比较有哪些特点_栓流气力输送相比较传统的高速气力输送方式而言,有哪些优势?...

南京翔瑞粉体:“气力输送”是指运用物料载体压缩空气(或气体),将散装物料从一处输送到另一处的输送系统,与传统的输送机械相比,气力输送系统在输送过程中不易出现沾染粉尘、受潮、污损等现象,并…

32位java虚拟机_微软Java虚拟机-Microsoft VM32位下载V5.0.3805.0安装版-MicrosoftJavaVirtualMachine西西软件下载...

Microsoft VM32位是一款微软Java虚拟机(Microsoft Java Virtual Machine),为IE浏览器提供Java支持。Microsoft VM for Java 是在由Microsoft开发类别 Servers Shareware 软件。安装在WinNT上之前必须打有 NT4 Service Pack 3 以上。安装检测检查是否已安装 Microsof…

iframe src 传参数_剧本杀测评|本友投稿——蜀山传(非剧透)

点击蓝字关注“我爱剧本杀”以下内容不会剧透请放心阅读本友投稿——《蜀山传》前言:这一次的“本友测评”真的是早早早早早鸟测评了,更加难得的是,这一次是曾经制作发行过《夜来香》的发行团队小本买卖和作者紧张齐聚南宁并亲自带本&#xf…

gnss单频软件接收机应用与编程_GNSS/GPS RTK定位 (手机,无人车定位,无人驾驶,因子图优化)...

Global navigation satellite system (GNSS)是手机或者无人车定位中的关键一个部分。GNSS是当前主要的可以提供绝对定位信息的一种信息来源。无人车的基于地图匹配定位的这一个部分中,GNSS经常用来提供初始化。就目前来看,GNSS的定位方式主要包括单点定位…

windows系统改装为linux系统_Linux怎么克隆系统?备份系统跟Windows系统有区别吗?...

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言本文主要讲解在Linux系统中怎么克隆系统镜像、克隆分区、整盘克隆。它跟Windows系统有何区别?您可能想要克隆Linux分…

c++ hough变换代码_hough变换原理以及实现(转载)

原理链接如下:陌归:霍夫(Hough)变换之直线检测代码链接:Ganso:Fundamentals——从车道线检测谈到霍夫变换同样是一篇讲解原理的番外,这一篇主要讲解CV中常用的霍夫变换的数学原理。霍夫变换的由…

java filter url匹配规则_java过滤器filter使用

一:filter:过滤器,拦截servlet的请求和响应。1、1 package jd.com.filter;23 import javax.servlet.*;4 import java.io.IOException;56 public classMyFilter implements Filter {7 Override8 public voiddestroy() {910 }1112 Override13 public voidi…

怎么对document.write写出来的内容调整对齐方式_干不过写PPT的?麦肯锡老阿姨教你4招...

PPT是我真正花过10,000小时以上的技能,毕竟在麦肯锡呆了7年。麦肯锡PPT重视内容与逻辑,我改行做营销后又开始注意视觉效果。怎么干过我们这些画PPT的?:)从内容到形式,我来讲讲4步流程,有助于提高效率。/ 01…