问题引入:

我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:iinsert into a values('你好helloworld你好','helloworld');

可能当你访问它的时候,会发现他的结果变成如下图所示:

那怎么样才能解决这种问题呢?通过下文对MySQL中字符集的一些操作,你将会得到答案!

查看库、表字符集命令:

要解决字符集的问题,首先要知道现在的系统、数据库、表、客户端等使用什么样的字符集,以及系统支持什么字符集等,下面介绍一些获取相关信息的语句:

1.查看数据库支持的所有字符集show character set;或者show char set;

2.查看当前状态,里面当然包括字符集的设置:status或者/s

其中Db characterset对应的是数据库目录下的db.opt文件内容:

3.查看系统字符集设置,包括所有的字符集设置:show variables like '%char%';

得出如何所示结果:

其中的含义如下:

关于connection相关的字符集的官方文档:What character set is the statement in when it leaves the client?

The server takes the character_set_client system variable to be the character set in which statements are sent by the client.

What character set should the server translate a statement to after receiving it?

For this, the server uses the character_set_connection and collation_connection system variables. It converts statements sent by the client from character_set_client to character_set_connection (except for string literals that have an introducer such as _latin1 or _utf8). collation_connection is important for comparisons of literal strings. For comparisons of strings with column values, collation_connection does not matter because columns have their own collation, which has a higher collation precedence.

What character set should the server translate to before shipping result sets or error messages back to the client?The character_set_results system variable indicates the character set in which the server returns query results to the client. This includes result data such as column values, and result metadata such as column names and error messages.

从上文中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_connection、character_set_client、character_set_results这三个值。如cmd是用gbk,而mysql workbench是用utf8.

CMD:

MySql WorkBench:

4.查看数据表中字符集设置:show full columns from tablename;

show create table tablename/G;

5.查看数据库编码:show create database dbname;

创建时指定字符集:

知道了怎么查找字符集的相关信息之后,我们就要懂得怎么在创建指定对象的时候,为该对象匹配相应的字符集。

1.服务器级:

在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。

2.数据库级:CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

注意,如果不指定默认的字符集,则系统会根据character_set_database的值进行设置,如:

3.表级:CREATE TABLE `db_name`.`tb_name` (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

从下图可看出,定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都未utf8

但要注意,如果没有定义表的默认字符集,则他会按照character_set_database的值来设置,如图所示:

4.列级:CREATE TABLE `db_name`.`tb_name` ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );

从下图可以看到,整个表的默认字符集为gbk,所以没有指定字符集的列都用默认的字符集,而指定了字符集的列name,则使用指定的字符集utf8。

修改字符集命令

如果已经是创建好的对象,那又应该如何处理呢。我们就应该对指定对象就行修改字符集的操作。

1.修改character_set_connection、character_set_client、character_set_results三值:

对于某一个连接来说,可以使用:SET NAMES 'charset_name' [COLLATE 'collation_name']

命令SET NAMES 'charset_name' [COLLATE 'collation_name']

相当于SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;

另外、还可以修改配置文件,对[mysql]下增加default-character-set=utf8,配置成你想要的字符集。(个人尝试在my.ini里面配置过,没有成效,不知道是不是被使用的客户端想要的字符集给覆盖掉了呢?)

2.修改character_set_database字段:ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

3.修改character_set_server字段:

最简单的方法是直接改my.ini配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。

4.修改表的字符集:ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]

5.修改列的字符集:col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]

例如:ALTER TABLE t1 MODIFY col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci;

转自:http://zhidao.baidu.com/link?url=E5kHt1YHeMOFxI6p_5myGoGmHw0wwVi2KEOomo2tzKrHn9KihKaH0Cb5eGb8Bz015hKlP1oBYqOa-Ka2MV1K4SnR0aWTBnRrqEJiWqKMale参考资料:

MySQL的Character Set Support:  http://dev.mysql.com/doc/refman/5.6/en/charset.html

mysql常用查看库,表字符集命令:  http://bjlfp.blog.163.com/blog/static/773684612012298455765/

MySQL 插入数据时,中文乱码问题的解决: http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html

mysql数据库character_关于MySQL如何修改character相关推荐

  1. mysql数据库编码设置_如何修改mysql数据库编码

    在建网站时,有时需要将一个数据库里的数据导入到另一个数据库里,但往往会出现二个数据库的编码不同,造成网页乱码.解决方法就是修改数据库编码. 下面介绍一下如何修改MYSQL数据库编码的方法. 方法/步骤 ...

  2. 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...

    使用批处理命令初始化和开启mysql服务,移植数据库之后可以直接运行访问,对于学习数据库的人来说特别的方便哦. 我们可以从mysql官网下载官方社区版本的mysql: 这里使用之前下载的8.0.15来 ...

  3. mysql数据库备份与恢复,mysql多实例部署

    mysql数据库备份与恢复,mysql多实例部署 文章目录 mysql数据库备份与恢复,mysql多实例部署 1: 数据库备份 2:冷备份 3:热备份 4:mysql备份工具mysqldump 5:差 ...

  4. mysql数据库是什么, mysql数据库的特点, SQL 字段数据类型

    mysql数据库是什么 MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司.      MySQL 是一种关联数据库管理系统,关联数据库将数据保存 ...

  5. MySQL数据库健康检查--MySQL巡检

    MySQL数据库健康检查--MySQL巡检 示例文件下载地址: MySQL健康检查脚本示例.zip 小麦苗 数据库 健康检查脚本 有如下的特点: 1.  绿色版.免安装.纯 SQL 文本 2.  跨平 ...

  6. mysql 重装,Windows系统中完全卸载MySQL数据库实现重装mysql

    一.在控制面板,卸载MySQL的所有组件 控制面板-->所有控制面板项-->程序和功能,卸载所有和MySQL有关的程序 二.找到你的MysQL安装路径,看还有没有和MySQL有关的文件夹, ...

  7. linux怎么把mysql数据库备份还原,MySQL数据库备份和还原

    MySQL数据库备份和还原 打开cmd命令行,一定不是mysql的命令行,我第一次就错在这个地方,郁闷了很久 备份MySQL数据库的命令 mysqldump -hhostname -uusername ...

  8. asp 更新 mysql数据库_asp update mysql数据库

    数据库必知词汇:数据操纵语言DML |名词定义|数据操纵语言(Data Manipulation Language, DML)是SQL语言的四大主要分类之一,用户通过它可以实现对数据库数据的基本操作. ...

  9. 4. MySQL数据库管理系统(MySQL的下载安装、配置、补丁 一站式)

    文章目录 MySQL数据库管理系统 1. MySQL下载 2. MySQL安装 3. 创建配置文件 4. 初始化 5. 启动MySQL 6. 使用MySQL 7. MySQL测试 MySQL数据库管理 ...

  10. mysql数据库批量编码_MySQL批量修改数据库的编码类型

    --修改表编码 select concat('alter table ', table_schema, '.', table_name, ' charset=\'gbk\';') from Table ...

最新文章

  1. Java swing 如何将一个按钮放置到弹出框框的任意位置?(Absolute layout 布局的使用)...
  2. deep learning with python 中文版-Deep Learning with Python
  3. 简明python教程 --C++程序员的视角(五):面向对象的编程
  4. 郴州郴锦机器人_减税降费宣传走进郴州市民营企业高质量发展专题培训班
  5. Matlab中求数据概率分布的方法
  6. 日常计算机操作知识试题,关于2017计算机一级考试试题操作题
  7. Python格式化函数format详解
  8. set_error_handler() 重要用法
  9. vivo X27发布日期官宣: 3月19日 三亚见!
  10. i5 9400f和i7 7700k哪个好
  11. ssm社区线上超市购物系统毕业设计-附源码211704
  12. 疯狂java 视频_疯狂Java讲义配书视频教程 下载
  13. Flash cs3教程-数字传统动画(续)
  14. 医院患者随访管理系统
  15. 用户流失生命周期如何最大化延缓或延长(包含引流-促活-问卷调研-流失召回话术)
  16. [预推免]——中科院计算所
  17. iOS 【模仿App 获取app素材】
  18. 使用conda安装pytorch时出现PackagesNotFoundError: The following packages are not available from current chan
  19. 人脸识别门禁方案汇总和应用分析,解析指标背后的含义
  20. 云计算进入深水区, MSP才是政企用好云的生力军

热门文章

  1. Task.Yield()和Task.CompletedTask有什么不同
  2. 提高模型准确率:组合模型
  3. delphi 隐藏指定程序的托盘图标
  4. Vue中配置代理服务器
  5. 刷脸支付的场景应用遍布大街小巷
  6. CopyOnWriteArrayList 有什么特点?
  7. [深度学习]基于TensorFlow的基本深度学习模型
  8. matlab newton插值法,matlab中newton插值法
  9. 为什么要有虚拟内存?
  10. mysql workbench6.3.5_mysql workbench