gbk/gb2312 采用双字节字符集,不论中、英文字符均使用双字符来表示,为了区分中文,将其最高位都设定成1 gb2312是gbk的子集,gbk是gb18030的子集,gb2312仅能存储简体中文字符 gbk包括中日韩字符的大字符集 通常使用gbk字符集足够 国际通用性比utf8差,不过utf8占用的数据库比gbk大(utf8是三字节字符集)
utf全称(unicode transformation format),是unicode的一种存储方式,可变长度字符编码,又称万国码 数据库字符集尽量使用utf8(包括 connect、result、及最终html页面都必须要求一致为utf8) utf8使用可变长度字节来存储 unicode字符,例如 ascii字母继续使用1个字节存储,重音文字、希腊字母、或西里尔字母等使用2个字节来存储,而常用的汉字就要用3个字节;也就是一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。 utf8mb4一个字符最多能存4字节,所以能支持更多的字符集;项目中常用utf8mb4存放emoji表情 latin1 是8bit (1 bytes)字符集,但不能覆盖亚洲、非洲语言 unidoce是latin1的扩展,增加了亚洲、非洲常规语言支持,但仍不支持全部语言,且ascii用unidoce来表示效率不高(小字符集转换成大字符集,往往便随的就是字符的丢失) utf8是unicode的扩展 gbk、gb2312等字符集与utf8之间都必须通过unicode编码才能相互转换
char(n):n代表的是字符个数(也叫字符长度)、而非bytes char(n):是固定长存储,占用定长的存储空间,不足的部分用空格填充;mysql处理char(n)类型时,需要将空格strip掉后return。 存储空间:char(n)类型的存储空间和字符集有关系,结合刚才字符集的知识点,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes、数字和字符统一用一个字符表示。 存储机制:在不够n长度时,mysql在存储数据时,需要用填充特殊的空格,而非十六进制的20 思考: char(30),在不同的字符集中最多能存放多少个字母、汉字,以及占用空间情况 gbk: 可以存放30个字节 占用的空间30*2 utf8:可以存放30个字节 占用的空间30*3
varchar(n):n代表的是字符个数(也叫字符长度)、而非bytes varchar(n):是变长存储,仅使用必要的存储空间. 存储空间:varchar(n)类型的存储空间和字符集有关系,结合刚才字符集的知识点,一个中文在utf8字符集中占用3个bytes、gbk统一占用2个bytes、数字和字符一个字符表示。 存储机制:varchar(n)字段存储实际是从第二个字节开始存储,然后用1到2个字节表示实际长度,剩下的才是可以存储数据的范围,因此最大可用存储范围是65535-3=65532字节;第一个字节标识是否为空.(长度小于255字节,使用一个字节来表示长度;大于255字节使用两个字节来表示长度)
临时生效
mysql> set character_set = 'gbk'; mysql> set character_set_client = 'gbk';
mysql> set global character_set_client = 'gbk'; query ok, 0 rows affected (0.00 sec)
vim /etc/my.cnf character-set-server=utf8
如对本文有疑问, 点击进行留言回复!!
MySQL-关系代数-并、交、差、等值连接、自然连接、左连接。。。
【MySQL牛客】10.获取所有非manager的员工emp_no
网友评论