MySQL DBA 字符集及转码处理,认识MySQL存储引擎(七)

什么是字符集

理解不同字符集编码

理解使用的工具字符集

数据库字符集选择指导

数据乱码处理技巧

===================================================================

什么是字符集

字符集是一套符号和编码的规则,字符串都必须有相应的字符集

校验集是这套符号和编码的校验规则,定义字符排序规则,字符串之间的比较规则

ASCII字符在不同字符集中,其所需的字节数是不一样的

多字节字符间是以字符进行比较,而非以字节为单位进行比较

校验集可以用于验证大小写,不同重音等是否一致

个别校验集是二进制的,基于字符对应的数值进行比较

xxx_bin将字符串中的每一个字符用二进制数据存储,区分大小写。

xxx_general_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。

xxx_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感

locale  --查看终端编码

echo "林" |iconv -t gbk|hexdump

echo "林" |hexdump

echo "林" |iconv -t UTF-16|hexdump

echo "a" |iconv -t gbk|hexdump   --实际存储2字节。显示1字节

echo "a" |iconv -t utf8|hexdump  --实际存储3字节。显示1字节

从一个大的字符集往小字符集转换,可能会丢字符,比如utf8->gbk

varchar(30),在utf-8字符集下,最多可以写入几个英文,存储长度是多少? 30、91

varchar(30),在latin1字符集下,最多可以写入几个中文字符,存储长度是多少? 15、31

理解使用的工具字符集

locale --远程终端字符集

本地会话终端字符集 --首选项

xshell 默认utf8 secuCRT 默认gbk

数据库字符集选择指导

result字符集集成连接字符集

服务端:=>database=>table=>col

客户端:connection=>result

动态修改客户端字符集:set names utf8

无法动态修改服务端字符集

数据库配置字符集 character_set_server

os字符集定义  

cat /etc/sysconfig/il8n  --centos6

cat /etc/locale.conf  --centos 7

file backup.sql 查看文件字符集

export LANG=gbk   --临时设置终端字符集

locale -a|grep 'gbk'

mysqldump  --help|grep where

mysqldump --single-transaction --master-data=2 --where = '1=1 limit 10000'

iconv -t utf8 xxx.sql > utf8_xxx.sql

大字符集转小字符集可能失败 utf8=>gbk 

DTS

kettle

MySQL存储引擎

原文地址:https://www.cnblogs.com/geek-ace/p/11117411.html