1、Ascii(American Standard Code for Information Interchange,美国信息互换标准代码)
计算机最初编码,八个字节表示计算机 控制码、空格、标点符号、数字、大小写字母 只适用于英文。
2、unicode编码--是字符集
随机计算机普及 一个字节不能代表世界所有字符,于是 ISO(国际标谁化组织)决定用俩个字节代表世界所有文化、所有字母和符号 的。
3、UTF-8编码--是对unicode的编码规则
unicode的缺点: 英文字母只用一个字节表示就够了、汉字俩个字节 计算机不知道俩个字节代表的是一个英文字母 还是俩个英文字母,如果一个英文字母用俩个字节表示,那对于存储空间是极大的浪费。所以UTF-8出现了。
UTF-8的意思是:
a、unicode在网络上每次传输8个位数据。
b、UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节)。从unicode到utf-8并不是直接的对应,而是要过一些算法和规则来转换。
4、mysql utf-8
a、“utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。所以MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多。
b、MySQL的“utf8mb4”是真正的“UTF-8”
c、utf8mb4是utf8的超集,将现有utf8编码改为utf8mb4外不需要做其他转换
5、mysql char&varchar
- varchar 可变长度,根据实际需求存储数据
- char 是固定长度 不足补空格
- varchar(100) varchar(200) 都存储90个字符不同之处:物理存储空间一样(可变长度),内存使用字符类型中定义的长度保存值
- varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度 (如果列声明的长度超过255,则使用两个字节) varchar(10) 存储abcdefjhij 10个字符物理存储使用了11个字节
- varchar 其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。
- char 最大255个字符
- MySQL要求一个行定义长度不能超过65535个字节,不包括text、blob等大字段类型,varchar长度受此长度限制,和其他非大字段加起来不能超过65535个字节。varchar类型单列最大长度得考虑整行长度