MySQL避免乱码

编码简介

(1)ASCII码,占7bit,由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成;
(2)latin1,占1byte,在ASCII基础上,增加128 ~ 255区间的字符;
(3)GB2312等CJK字符集,可变长字符集,最多占2bytes,用于存储常见的CJK字符;
(4)UTF8,可变长字符集,最多占3bytes,可以囊括ASCII、CJK及其他绝大多数常用语言文字;这中间其实还有个UNICODE字符集,它也是2bytes的,也能囊括ASCII字符,但即便是ASCII字符也需要消耗2bytes,存在一定浪费,而用UTF8存储ASCII字符时,实际只需要1byte,更为节省存储空间;
(5)UTF8MB4,可变长字符集,最多占4bytes,可以包含上面其他几种字符集;同样地,以UTF8MB4存储ASCII字符时,实际上也是只占用1bytes,存储一般的汉字占用3bytes,而存储个别汉字则需要4bytes,存储emoji也至少需要4bytes;MySQL采用UTF8MB4字符集时,存储文本实际消耗字节数是由文本内容的字节数决定的,并非总是需要4字节,列举几种情况:>输入字符集任意,且存储ASCII字符时,每个字符需要1byte;输入字符集是GB2312,且存储的字符是汉字时,每个字符需要2bytes;输入字符集是UTF8/UTF8MB4,且存储的字符是低编码汉字时,每个字符需要3bytes;输入字符集是UTF8/UTF8MB4,且存储的字符是高编码汉字时,每个字符需要4bytes;输入字符集是binary,且存储的字符是高编码汉字时,每个字符需要4bytes;

表字符集由UTF8直接转换成UTF8MB4的方法

1、只修改字符集(使用默认校验集)mysql> alter table t1 convert to character set utf8mb4
2、同时修改表字符集和校验集mysql> alter table t1 convert to character set utf8mb4 collate utf8mb4_bin;
3、只修改某列的字符集mysql> alter table t1 modify c1 varchar(20) character set utf8mb4 not null default
4、同时修改某列的字符集和校验集mysql> alter table t1 modify c1 varchar(20) character set utf8mb4 collate utf8mb4_unicode_ci not null default

MySQL端字符集

character_set_server:server端默认字符集;
character_set_database:database默认字符集,若未设定,则和 character_set_server 的设定一样;database中的数据表/stored procedure/stored function 也可以自行设定字符集,若未指定,则和 character_set_database的设置一样;数据表中的字符类型列,也可以单独设定字符集,若未设定,则和该表指定的字符集一样;
character_set_client:客户端显示读取结果的字符集;
character_set_connection:客户端从server端读取数据时传输字符集;
character_set_results:server端将数据发送给客户端时的字符集;MySQL涉及到字符集的设置实在太多,因此强烈建议各个环节全部采用同一种字符集,避免出现意外状况。

总结建议

(1)从前端到后端(浏览器=>WEB Server=>MySQL连接层=>Server层=>DB层>TABLE层),尽可能使用同一种字符集;
(2)尽可能采用大字符集,也就是优先级:UTF8Mb4 > UTF8 > GBK > LATIN1;
(3)采用逻辑备份数据时,切记要不定期进行恢复测试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值