本文共 2057 字,大约阅读时间需要 6 分钟。
MySQL 在整体架构上分为 Server 层和存储引擎层。
其中 Server 层,包括连接器、查询缓存、分析器、优化器、执行器等,存储过程、触发器、视图和内置函数都在这层实现。数据引擎层负责数据的存储和提取,如 InnoDB、MyISAM、Memory 等引擎。在客户端连接到 Server 层后,Server 会调用数据引擎提供的接口,进行数据的变更。
单点(Single),适合小规模应用,复制(Replication),适合中小规模应用,集群(Cluster),适合大规模应用。
字符集:是一套字符与字符编码的集合,用于显示一些抽象的符号
校验规则:字符集的排序规则
常用的字符编码有:
Ascii,gb2312, gbk, latin1, unicode, utf8是uni code万国码/统一码 的优化实现
MySQL 5.5.3之后增加了utfmb4字符编码,utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符。例如emoji和一些不常用的汉字,如“墅”,这些需要四个字节才能编码的就不支持。utf8mb4对应的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci.
utf8mb4_unicode_ci和utf8mb4_general_ci的对比:
准确性:
utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。
但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。
性能
utf8mb4_general_ci在比较和排序的时候更快
utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。
show character set;
select * from information_schema.CHARACTER_SETS;
show collation;
show collation like '%utf8%';
show variables like 'character%' ;
| character_set_client | utf8
| character_set_connection | utf8
| character_set_database | utf8 ##默认数据库的字符集
| character_set_filesystem | binary
| character_set_results | utf8
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | /mysql/app/mysql-5.7.20-linux-glibc2.12-x86_64/share/charsets/
show variables like ‘collation%’ ;
| Variable_name | Value |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
utf8_ general_ ci: 不区分大小写的排序方式
utf8_ general_ cs:区分大小写的排序方式
utf8_ general_bin:二进制的排序方式
重点:生产环境不要随便改,会出问题,下面的只针对没有数据的环境修改,比较安全。
临时更改:set global character_set_server=utf8;
2)永久修改:
修改my. cnf
[mysqld]
character-set-server=utf8
重启mysql生效
1)临时更改:set global.character_set_server=utf8;
2)永久修改: alter database itpuxc character set utf8 collate utf8_general.ci;
alter table itpuxc2 default charset utf8;
转载地址:http://txbai.baihongyu.com/