原文:http://blog.csdn.net/yjz_sdau/article/details/52135050

(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,

如 default-character-set = utf8 
character_set_server = utf8

修改完后,重启mysql的服务,service mysql restart

使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8

(2) 还有一种修改mysql默认字符集的方法,就是使用mysql的命令

1、修改数据库字符编码

mysql> alter database mydb character set utf8 ;

2、创建数据库时,指定数据库的字符编码

mysql> create database mydb character set utf8 ;

3、查看mysql数据库的字符编码

mysql> show variables like 'character%'; //查询当前mysql数据库的所有属性的字符编码

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

4、修改mysql数据库的字符编码

修改字符编码必须要修改mysql的配置文件my.cnf,然后重启才能生效

通常需要修改my.cnf的如下几个地方:

【client】下面,加上default-character-set=utf8,或者character_set_client=utf8

【mysqld】下面,加上character_set_server = utf8 ;

因为以上配置,mysql默认是latin1,如果仅仅是通过命令行客户端,mysql重启之后就不起作用了。

如下是客户端命令行修改方式,不推荐使用

mysql> set character_set_client=utf8 ;

mysql> set character_set_connection=utf8 ;

mysql> set character_set_database=utf8 ;

mysql> set character_set_database=utf8 ;

mysql> set character_set_results=utf8 ;

mysql> set character_set_server=utf8 ;

mysql> set character_set_system=utf8 ;

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

http://m.blog.chinaunix.net/uid-20639775-id-154602.html

如果在应用开始阶段没有正确的设置字符集,在运行一段时间以后才发现 存在不能满足要求需要调整,

又不想丢弃这段时间的数据,那么就需要进行字符集的修改。 字符集的修改不能直接通过 alter

dataabase character set *** 或者 alter table tablename character set ***; 命令进行,这两个

命令都没有更新已有记录的字符集, 而只是对新创建的表或者记录生效。
已有的记录的字符集调整,需要先将数据导出,经过适当的调整重新导入后才可完成。

以下模拟的是将latin1字符集的数据库修改成GBK字符集的数据库的过程。

1> 导出表结构:
mysqldump -uroot -p --default-character-set=gbk -d databasename > createtab.sql

其中 --default-character-set=gbk 表示设置以什么字符集连接, -d 表示只导出表结构,不导出数

据。

2>手工修改 createtab.sql 中表结构定义中的字符集为新的字符集。

3>确保记录不再更新,导出所有记录。

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-

set=latin1 databasename > data.sql

--quick: 该选项用于转储大的表。 它强制 mysqldump 从服务器一次一行地检索表中的行而不是 检

索所有行,并在输出前将它缓存到内存中。

--extended-insert: 使用包括几个 values 列表的多行insert语法,这样使转储文件更小,重载文件时

可以加速插入。

--no-create-info: 不写重新创建每个转储表的create table 语句。

--default-character-set=latin1: 按照原有的字符集导出所有数据,这样导出的文件中,所有中文都是

可见的,不会保存成乱码。

4>打开data.sql,将 set names latin1 修改成 set names gbk 。

5>使用新的字符集创建新的数据库。

create database databasename default charset gbk;

6>创建表,执行 createtab.sql

mysql -uroot -p databasename < createtab.sql

7>导入数据,执行data.sql

mysql -uroot -p databasename < data.sql

注意:选择字符集的时候,要注意最好是源字符的超级,或者确定比源字符集的字库更大,否则如果目标

字符集的字库小于源字符集的字库,那么目标字符集中不支持的字符倒入后会变成乱码,丢失一部分数据。 例如 GBK字符集的字库大于GB2312字符集,那么GBK字符集的数据,如果导入GB2312数据库中,就会丢失GB2312中不支持的那部分汉字的数据。

最新文章

  1. yii框架安装
  2. get请求报文
  3. topcoder SRM 625 DIV2 IncrementingSequence
  4. [题解]扫雷Mine
  5. Python调用C的SDK出现返回值不符合预期以及Segmentation fault
  6. python学习笔记四 迭代器,生成器,装饰器(基础篇)
  7. PHP包名解释
  8. [Windows]VS2010如何以管理员权限启动?(转)
  9. 【HDOJ】4297 One and One Story
  10. iOS开发UI篇—UITabBarController生命周期(使用storyoard搭建)
  11. cocos2dx lua调用C++类.
  12. ANDROID SHAPE画圆形背景_ANDROID实现角标布局
  13. python字符串27种常见的方法
  14. Redtiger SQL注入练习(二)
  15. Zabbix通过JMX方式监控java中间件
  16. 三月pat(转)
  17. 安装和配置jBPM4,并举个hello.w
  18. Linux中运行SpringBoot项目,永久运行
  19. 最短路径-并查集+Floyd[转载]
  20. pthread中errors.h的代码

热门文章

  1. [转]一个CMake编译问题的解决过程
  2. [译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
  3. pytest 常用命令行选项(一)
  4. Android-自定义ListView下拉刷新与上拉加载
  5. 四、创建覆盖网络--Flannel
  6. shell模拟“多线程”
  7. CSharp程序员学Android开发---3.Android内部元素不填充BUG
  8. ServiceBase.OnStart 方法
  9. Unity Shader序列帧动画学习笔记
  10. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)