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存储引擎