MySQL 字符集问题及安全的更新操作

一、字符集乱码

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;
原文地址:https://www.cnblogs.com/zhengwenqiang/p/7965903.html