一、字符集乱码
1.操作系统字符集
[root@mysql5 ~]# cat /etc/system-release /etc/sysconfig/i18n
CentOS release 6.5 (Final) # 操作系统发行版本
LANG="en_US.UTF-8" # 语言版本
SYSFONT="latarcyrheb-sun16"
2.设置MySQL客户端
set names utf8;
[mysql]
default-character-set=utf8
3.设置MySQL服务端
[mysqld]
# mysql5.1
default-character-set=utf8
# mysql5.5
character-set-server=utf8
4.库表
create database zwq default character set utf8 collate utf8_general_ci;
5、系统字符集与数据库字符集的关联
[root@mysql5 ~]# cat /etc/sysconfig/i18n ; mysql -e "show variables like 'character_set%';";
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 $LANG决定 |
| character_set_connection | utf8 $LANG决定 |
| character_set_database | utf8 属性 character_set_server |
| character_set_filesystem | binary |
| character_set_results | utf8 $LANG决定 |
| character_set_server | utf8 属性 character_set_server |
| character_set_system | utf8 $LANG决定 |
| character_sets_dir | /app/mysql/share/charsets/ |
+--------------------------+-----------------------------------+
/etc/sysconfig/i18n中的LANG变量决定了 character_set_client、character_set_connection、character_set_results、character_set_system
my.cnf配置项
[mysqld]
character_set_server 决定了 character_set_database、character_set_server
character_set_filesystem 决定了 character_set_filesystem
set names utf8 决定了 character_set_client、character_set_connection、character_set_results
--default-character-set=utf8 效果跟set names utf8一样
二、更改已有数据的字符集
-- 1、建库建表的语句导出,sed批量修改为utf8
mysqldump -uroot -proot --default-character-set=latin1 -d zwq > destructer.sql
-- 2、导出所有数据
mysqldump -uroot -proot --quick --no-create-info --extended-insert --default-character-set=utf8 db_name >db_name_data.sql
-- 3、修改mysql客户端和服务端编码为utf8
-- 4、删除原有的库表、数据
-- 5、导入新的建库建表语句
-- 6、导入mysql的所有数据
三、安全的更新操作
为了防止不加where条件的update语句被执行,需要在 /etc/my.cnf 、 ~/.my.cnf 或 --defaults-file 指定的配置文件中加入
[mysql]
safe-updates=TRUE
四、将表移动到另一个库中
-- 方式1
rename table school.student to zwq.student;
-- 方式2
alter table zwq.student rename to school.student;