【年薪百万之IT界大神成长之路十】由MySQL排序规则引发的一系列惨案

 
愿你如阳光,明媚不忧伤。

 


1. 位 / 比特,字节,字符,字符集,字符编码

 
计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致’a’解析成’b’或者乱码。
 

位 / 比特(bits)是计算机中最基本的单位。计算机中由于只有逻辑0和逻辑1的存在,因此很多东西、动作、数字都要表示为一串二进制的字码例如: 1001 0000 1101 等等。其中每一个逻辑0或者1便是一个位,计算机中的CPU位数指的就是CPU一次能处理的最大位数。


字节(Byte)是计算机可寻址的最小单位,用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。每个字节有8个二进制位,其中最右边的一位为最低位,最左边的一位为最高位,每个二进制位的值不是0就是1。


字符(Character)指类字形单位符号,是各种文字和符号的总称,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。是数据结构最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。也是计算机中最常用到的信息形式。


字符集(Character Set)是各种文字和符号,包括各国家文字、标点符号、图形符号、数字等多个字符的集合。常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。


字符编码(Character Encoding)是表示字符的一种方式。即在字符集与数字系统之间建立对应关系,它是信息处理的一项基本技术。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。

在这里插入图片描述

 


2. 字节序 Little endian 和 Big endian

 

字节序(endian)就是字节的顺序,用来描述计算机中如何组织字节,组成对应数字的。计算机中的内存可以看成由byte组成的大数组,在读取数据的时候,根据数据类型的不同和字节序不同来读取。 如果一个数据只用一个字节表示,比如C语言中的char,或Java中的Byte,给我们一个地址,我们直接从给定地址后面取一个字节就可以了。但是如果是类型short或其他多字节的数据类型,给我们一个地址,我们可以由两种不同的读法:从高地址到低地址读,从低地址到高地址的读。

  • Little endian 小端模式,就是高位数据存放在高位地址,低位数据存放的是低位地址,好处是方便计算机读取。大部分主机字节序采用小端模式。
低地址 ---- 小端模式 ----> 高地址
0x78  |  0x56  |  0x34  |  0x12
  • Big endian 大端模式,就是高位数据存放在低位地址,低位数据存高位地址,好处是和书写的顺序一致。网络字节序采用大端模式,由TCP协议规定。
低地址 ---- 大端模式 ----> 高地址
0x12  |  0x34  |  0x56  |  0x78

 


3. Windows系统下的ANSI编码

 

ANSI(AMERICAN NATIONAL STANDARDS INSTITUTE)美国国家标准学会成立于1918年。但在windows系统中,ANSI编码意思代表“本地编码”。ANSI并不是某一种特定的字符编码,而是在不同的系统中表示不同的编码。微软用一个叫“Windows code pages”(在命令行下执行chcp命令可以查看当前code page的值)的值来判断系统默认编码

  • 中文系统:当前ANSI编码实际是GBK编码(936)
  • 港台系统:当前ANSI编码实际是Big5编码(950)
  • 日文系统:当前ANSI编码实际是JIS编码(932)
  • 韩文系统:当前ANSI编码实际是EUC-KR编码(949)

在这里插入图片描述

 


4. MySQL中的字符排序规则

 

排序规则全称说明
ci(默认)case insensitive大小写不敏感
cscase sensitive大小写敏感
binbinary用二进制数据编译存储,大小写敏感
aiaccent insensitive口音 / 重音不敏感
asaccent sensitive口音 / 重音敏感
kskana sensitive假名敏感
  • 查看 MySQL 字符集下的默认排序规则
执行语句:
SHOW COLLATION LIKE 'utf8mb4%';

在这里插入图片描述

 


5. 布莱尔盲文

 

布莱尔盲文(Braille)盲文或称点字、凸字,是专为盲人设计、靠触觉感知的文字。透过点字板、点字机、点字打印机等在纸张上制作出不同组合的凸点而组成,一般每一个方块的点字是由六点组成,左侧从上到下为123,右侧为456,叫一方。 它是由法国盲人路易·布莱尔于1824年创造的。

在这里插入图片描述

 


【每日一面】

Java基本类型数据各占几个字节

 

基本数据类型占位字节默认值
byte810
short1620
int3240
long6480L
float3240.0f
double6480.0d
char162\u0000
boolean81FALSE
String--null
void---
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值