mysql的 字符集和编码解码

83 阅读3分钟
1.mysql 的字符集

mysql 所有字符都同等于字符 列如a------->000000001 16进制,mysql支持很多字符集 比如ascll 字符集 收录 108种字符,utf-8也是收录地球上所有字符, 并且不断新增 mysql中支持的字符集, 例如 utf8 其实 是utf8mb3的别名,然后 是阉割过utf8字符集 ,正宗的 utf8字符字对应的是 utf8mb4 假如要使用一些特殊字符可能就需要utf8mb4 ,因为mysql最大字节 会影响存储和性能 可以看mysql支持的字符集 ;show CHARACTER SET 列子 show CHARACTER SET like 'utf%' MySQL 字符集的 比较规则 : 比如mysql中的 utf_8的下的 比较规则 ,比如 utf8_danish_ci usf_+语种加上 +ci ci 表示不区分大小写 utf8mb4_general_ci 这个就代表是通用 这样就可以 Default 代表是不是默认的 ,一般创建mysql就会中这 这个 比较规则 各级别的字符集和比较规则 服务器的比较规则 数据库的比较规则 表级别 列级别 服务器 一般跟随服务器 show VARIABLES ; 我电脑默认就是 utf_8 比较规则是 utf_8general_ci 这个 可以在启动的时候就直接修改 数据库 级别 创建语句 的语法来 的 CREATE database '数据库名称' DEFAULT character set '字符集名称' collate '比较规则名称' 一般默认可以不写 表级别 也是 同理, 假如不写 就是默认跟随 数据库级别 同理 假如 没有选中 默认数据库 就是 跟随服务器级别 ; 列级别是同理 也是跟随 表级别 假如不选就是跟随 表级别的 从小到大 如果没有显示的 指定是用什么字符集 直接一直找最大 的 ; 假如 你在 表中插入 一条语句 insert into t(i) vales(“我 ”) 在 gBK 在库中就占位两个字节,假如在utf_8中就占位 占了 3个字节 乱码的 原因 就是因为在网络通信中,随意中不通的 字符集 解码和 编码 就是可能解析相同的 二进制码的 就可能导致乱码的现象 ;

2 .解码和编码

所以我们就要解码和编码,比如我们向服务发送一般gbk编码的字符串 ,服务器先通过gbk的字符集先解码 ,然后在通过utf_8再次编码,这个样子就不会乱码了. mysql在字符集的转换,在网络通信中有3段不同系统变量,character_set_client charcter_set_connerction character_set_reults j假如中间使用了 不同的 字符集 比如 unix系统和 wodows 系统发送一个‘你’ 具体流程是这样 我请 球请求 character_set_client---->charcter_set_connerction------->charcter_set_connerction ---->展示给你 一般都会把这3个 东西设置一样 保持一致 避免出现 一些 错误 如何 设置 在启动 mysql default-charset-set=utf-8

3.比较规则是在生产环境如何应用

比如 a B b A 这4个字符 ,假如 用 GBk-chiese-ci 用 orderby 就是 a>A>b>B 假如用 gbk_chaiese 就会 A>B>a>B 在对一个字符串进行排序的数据要考虑什么?

要考虑当时环境 下比较规则是 在 哪一种比较规则下面的 ,是不是能得到想要结果