背景

在使用Python + Testlink做自动化的过程中,遇到了数据入库出现乱码的情况,后来通过修改字符集的方式解决了这个问题。下面的内容主要来自于一篇相关博文,博主做了细微的调整,

原文链接:https://blog.csdn.net/wyzxg/article/details/7581415

Mysql的字符集分类

字符集类型 描述 对应系统变量
客户端字符集 通知server端,客户端提交的sql语句编码格式 character_set_client
连接字符集 server端翻译sql语句时,使用的编码格式 character_set_connectiont
结果集字符集 server端返回结果集之前把结果集转换成的编码格式 character_set_results
存储字符集 数据在存储引擎里编码格式 character_set_results/character_set_server

为了不出现乱码,我们需要统一修改这些参数,比如我要把数据库的默认字符集改为utf8,可以在[client]下添加如下参数 default-character-set=utf8,在[mysqld]下添加如下参数default-character-set=utf8,然后重启mysql服务,再查看字符集(要重新登录客户端)

查看Mysql库现有字符集

  • mysql> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
  • mysql> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
  • mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql的字符集分的比较细,可以采用默认值,也可以指定值

数据库字符集

创建使用默认字符集的库

  • mysql> create database db1;

    Query OK, 1 row affected (0.01 sec)
  • mysql> show create database db1;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

创建指定字符集的库

  • mysql> create database db2 default character set latin1;

    Query OK, 1 row affected (0.01 sec)

  • mysql> show create database db2;

+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| db2 | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)

修改库的字符集

  • mysql> alter database db2 default character set utf8;

    Query OK, 1 row affected (0.00 sec)

  • mysql> show create database db2;

+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| db2 | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

表字符集

  • mysql> use db2;

    Database changed

创建使用默认库字符集的表

  • mysql> create table t1(a varchar(10));

    Query OK, 0 rows affected (0.01 sec)
  • mysql> show create table t1;
+-------+-------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`a` varchar(10) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------+
1 row in set (0.00 sec)

创建指定字符集的表

  • mysql> create table t2(a varchar(10)) default character set latin1;;

    Query OK, 0 rows affected (0.01 sec)

    ERROR:

    No query specified

  • mysql> show create table t2;

+-------+-------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------+
| t2 | CREATE TABLE `t2` (
`a` varchar(10) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------+
1 row in set (0.00 sec)

更改表的字符集

  • mysql> alter table t2 default character set utf8;

    Query OK, 0 rows affected (0.01 sec)

    Records: 0 Duplicates: 0 Warnings: 0

  • mysql> show create table t2;

+-------+--------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------+
| t2 | CREATE TABLE `t2` (
`a` varchar(10) character set latin1 default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------+
1 row in set (0.00 sec)

从上面可以看到,修改表的字符集时,不会影响已经存在列的字符集,但新增列将继承表的字符集,如下

  • mysql> alter table t2 add a2 varchar(10);

    Query OK, 0 rows affected (0.01 sec)

    Records: 0 Duplicates: 0 Warnings: 0

  • mysql> show create table t2;

+-------+---------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------+
| t2 | CREATE TABLE `t2` (
`a` varchar(10) character set latin1 default NULL,
`a2` varchar(10) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------+
1 row in set (0.01 sec)

如果想更改已经存在表和字符列的字符集,要用如下方式

  • mysql> alter table t2 convert to character set latin1;

    Query OK, 0 rows affected (0.01 sec)

    Records: 0 Duplicates: 0 Warnings: 0

  • mysql> show create table t2;

+-------+--------------------------------------+
| Table | Create Table |
+-------+--------------------------------------+
| t2 | CREATE TABLE `t2` (
`a` varchar(10) default NULL,
`a2` varchar(10) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------+
1 row in set (0.01 sec)

字段字符集

使用默认和指定字符集创建的列

  • mysql> create table t3 (a1 varchar(10),a2 varchar(10) character set latin1);

    Query OK, 0 rows affected (0.04 sec)

  • mysql> show create table t3;

+-------+-------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------+
| t3 | CREATE TABLE `t3` (
`a1` varchar(10) default NULL,
`a2` varchar(10) character set latin1 default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------+
1 row in set (0.00 sec)

查看列的字符集

  • mysql> show full columns from t3;
+------+------------+------------------+-----+----+--------+------+--------------------------------+--------+
| Field| Type | Collation | Null| Key| Default| Extra| Privileges | Comment|
+------+------------+------------------+-----+----+--------+------+--------------------------------+--------+
| a1 | varchar(10)| utf8_general_ci | YES | | NULL | | select,insert,update,references| |
| a2 | varchar(10)| latin1_swedish_ci| YES | | NULL | | select,insert,update,references| |
+------+------------+------------------+-----+----+--------+------+--------------------------------+--------+
2 rows in set (0.01 sec)

修改列的字符集

  • mysql> alter table t3 change a2 a2 varchar(10) character set utf8;

    Query OK, 0 rows affected (0.03 sec)

    Records: 0 Duplicates: 0 Warnings: 0

  • mysql> show full columns from t3;

+------+------------+----------------+-----+----+--------+------+--------------------------------+--------+
| Field| Type | Collation | Null| Key| Default| Extra| Privileges | Comment|
+------+------------+----------------+-----+----+--------+------+--------------------------------+--------+
| a1 | varchar(10)| utf8_general_ci| YES | | NULL | | select,insert,update,references| |
| a2 | varchar(10)| utf8_general_ci| YES | | NULL | | select,insert,update,references| |
+------+------------+----------------+-----+----+--------+------+--------------------------------+--------+
2 rows in set (0.00 sec)

结论:字符集从数据库、表、列的字符集是逐级继承的关系

命令总结

查看字符集命令

mysql> show create table t4; //显示表字符集
mysql> show create database db2; //显示库字符集
mysql> show full columns from t4; //显示列字符集 alter database db2 default character set utf8; //更改库的字符集
alter table t2 convert to character set latin1;//更改表的现存列字符集
alter table t2 default character set utf8; //更能改表的默认字符集
alter table t3 change a2 a2 varchar(10) character set utf8; //更能改字段的字符集

修改mysql的默认存储引擎

  • mysql> show variables like 'storage%';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | MyISAM |
+----------------+--------+
1 row in set (0.01 sec)

在[mysqld]下添加如下参数default-storage-engine=innodb

重启mysql服务,查看

  • mysql> show variables like 'storage%';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.01 sec)

创建默认字符集的表

  • mysql> create table t4 (a1 int);

    Query OK, 0 rows affected (0.01 sec)

  • mysql> show create table t4;

+-------+-------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------+
| t4 | CREATE TABLE `t4` (
`a1` int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------+
1 row in set (0.00 sec)

更改表的默认字符集

  • mysql> alter table t4 engine myisam;

    Query OK, 0 rows affected (0.06 sec)

    Records: 0 Duplicates: 0 Warnings: 0

  • mysql> show create table t4;

+-------+-------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------+
| t4 | CREATE TABLE `t4` (
`a1` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------+
1 row in set (0.00 sec)

------end------

【Mysql】修改mysql的字符集和默认存储引擎,解决数据入库乱码问题的更多相关文章

  1. 修改mysql的字符集和默认存储引擎

    转自:http://blog.csdn.net/wyzxg/article/details/8779682 author:skatetime:2012/05/18 修改mysql的字符集和默认存储引擎 ...

  2. mysql 创建表指定 字符类型与存储引擎

    DROP TABLE IF EXISTS apilog; /*==============================================================*/ /* T ...

  3. MongoDB 存储引擎和数据模型设计

    标签: MongoDB NoSQL MongoDB 存储引擎和数据模型设计 1. 存储引擎 1.1 存储引擎是什么 1.2 MongoDB中的默认存储引擎 2. 数据模型设计 2.1 内嵌和引用 2. ...

  4. 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件

    字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...

  5. 涂抹mysql笔记-InnoDB/MyISAM及其它各种存储引擎

    存储引擎:一种设计的存取和处理方式.为不同访问特点的表对象指定不同的存储引擎,可以获取更高的性能和处理数据的灵活性.通常是.so文件,可以用mysql命令加载它. 查看当前mysql数据库支持的存储引 ...

  6. mysql总结:索引,存储引擎,大批量数据插入,事务,锁

    mysql总结 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 存储引擎: 常见存储引擎: Myisam:5.5之前默认引擎,支持 ...

  7. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

  8. 三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件

    1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G ...

  9. MySql(一)表类型(存储引擎)

    MySql(一)表类型(存储引擎) 一.MYSQL存储引擎概述 二.存储引擎的特性对比 2.1 MyISAM 2.2 InnoDB 2.2.1 自动增长列 2.2.2 外键约束 2.2.3 存储方式 ...

随机推荐

  1. onethink判断是否是手机访问?

    第一步:找到:Application / Common / Common / function.php 添加判断是否是手机访问的代码: /** * 判断当前访问的用户是 PC端 还是 手机端 返回tr ...

  2. fiddler win10-1703Failed to register Fiddler as the system proxy

    正解 The solution for the Fiddler error of "Failed to register Fiddler as the system proxy" ...

  3. couldn't connect to host

    “couldn't connect to host” 这样的错误可能是主机不可到达,或者端口不可到达. ping OK只代表主机可以到达. 端口不可到达可能是由于HTTP 服务器未启动或者监听在其他端 ...

  4. LINQ中的连接(join)用法示例

    Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.各个用法如下. 1. 组连接 组连接是与分组查询是一样的.即根据分组得到结果. 如下例,根据publisther分组得到结果. 使用组连接的 ...

  5. MySQL数据的查询注意

    mysql数据库的查询结果输出的是一个记录,这一个记录是以字典的形式存储的,所以获取字段时要用字典提取数据的形式获取字段信息: 查询的代码: def query(self): # sql语句 sql ...

  6. tomcat启动错误:ZipException

    [/opt/apache-tomcat-/webapps/secsight.war] -Dec- ::] org.apache.catalina.core.ContainerBase.addChild ...

  7. Flex 布局:实例篇

    上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法.你会看到,不管是什么布局,Flex往往都可以几行命令搞定. ​ 我只列出代码,详细的语法解释请查阅<Flex布局教程:语法篇& ...

  8. Get,Post请求方式详解

    前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都采用get方法,不理解. 在网上摘到一段比较有用的话 减低服务器流量压力根据 HTTP 规范,GET 用于信息获取,而且应该 ...

  9. 【Python】Python 读取csv的某行或某列数据

    Python 读取csv的某行 转载 2016年08月30日 21:01:44 标签: python / csv / 数据   站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Gith ...

  10. matplotlib-曲线和折线案例

    matplotlib-曲线和折线案例 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-5, 5, 100) pr ...