mysql字符集介绍
包括两部分 字符集CHARACTER和校对规则COLLATION
字符集是用来定义mysql字符串存储的方式
校对规则是定义比较字符串的方式
如果数据库存的是多过语言,就用utf8,每个汉字三个字节
如果只需支持中文,就用gbk,中英文都是占用2字节
查看mysql的字符集
show character set; 简写: show char set;
查看现有数据库编码设置
mysql> show variables like '%chara%'; | 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 |
如果mysql不指定的话,客户端的字符集一般和系统一致
防止乱码方法小结
不乱码的思想:
Linux系统 客户端 服务端 库 表 程序
需要控制以上流程编码一致,防止乱码
查看 编码设置:
Show global variables like ‘%chara%’;
一.Linux系统
[root@www ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"
二.mysql客户端
登录mysql 先做set names latin1; 这里的字符设置,要根据要插入表的字符编码,查看方法:(show create table tablename \G),然后再执行更新语句,或者插入中文。
- 在要执行的sql文件里,第一条添加 set names latin1;
- 通过mysql指定编码导入
Mysql –uroot –p’密码’ --default-charset-set=latin1 test < test.sql;
三.mysql服务端
- 在配置文件my.cnf里指定编码 重启生效 永久生效
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8(5.1之前的版本) character-set-server=uft8 (适合5.5) 中文还是选择utf8
四.库和表
创建库和表的时候指定默认的字符编码
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci; create table my_table (name varchar(20) not null default '') default charset utf8;
对于已有数据的表,修改字符集的思路
例如:latin1=>utf8
- 导出库和表的创建语句 将编码修改为utf8
- 导出所有数据
- 删除所有库和数据
- 利用新的建表和建库的语句创建新的库和表
- 导入数据