前言:
  一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因。
  (默认未指定字符集创建的数据库表,都是latinl字符集, 强烈建议使用utf8字符集)
   
  保证不出现乱码的思想:保证客户端、服务端、数据库、表字符集统一
  坑:有的时候,cmd或者linux系统字符集问题,其实数据库是正确的,只是我们执行命令在终端看到的是乱  码而已,这时需要设置linux系统字符集
  1、查看liunx系统字符集:cat /etc/sysconfig/i18n
  2、vim /etc/sysconfig/i18n
   
  备注:始终牢记,存放数据的是字段,所以编码最后是以字段的编码为准,数据库和表的编码影响的时候字段的默认值,也就是说在设置了数据库编码之后,新建的表在不指定的情况下就会和数据库编码相同,而不指定字段的编码时,字段的编码和表相同。
如果使用 Alter 修改一个表的字符编码,那原来的字段编码并不会发生改变,如果需要修改表编码的同时修改字段的编码,可以使用 convert
 
  一、查看是什么字符集
  1、查寻数据库是什么字符集
  show create database django\G (django 是数据库名称)
  
   
  2、查寻表是什么字符集
  show create table auth_group\G (auth_group 是表名称)
  
  ENGINE = InnoDB 该表数据库引擎是InnoDB
  DEFULT CHARSET=utf8 该表字符集是utf8
  COLLATE utf8_general_ci 校准规则
 
  3、查看所有字符集和对应的校准规则
  show character set;
  
 
  二、解决方法:
  1、插入数据的时候,先设置客户端插入字符集和数据库建表相同的字符集
  eg:如果数据库表字符集是latinl,那么插入数据的时候也要是latinl
  方法:set names latinl
  insert into student value('飞东')
  
  
 
  2、将SQL语句放入文件中,使用source来执行这个文件,插入数据,则不会出现乱码,原理是和1一样的,    只是放在文件中执行而已
  方法:将下面两个语句放入一个新建文件中,如mysql.sql
  set names Latinl
  insert into student value('飞东')
  执行这个文件:source mysql.sql
  
 
  3、从其他文件导入数据库(避免导入数据有中文乱码的问题)
  将数据编码格式保存为utf-8(UTF8不要导入gbk,gbk不要导入UTF8)
  set names utf8; ALTERDATABASEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;  修改数据库的编码格式
  ALTERTABLEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;     修改表的编码格式
  LOADLOCAL'C:\\utf8.txt'INTOTABLE tb_name;    从文件中导入数据库
 
  4、永久修改默认客户端编码格式(修改my.cnf配置文件,针对MySQL 5.5版本以上)
  
  
 
  5、永久修改默认服务端编码格式(修改my.cnf配置文件,针对MySQL 5.5版本以上)
  
  
  修改完毕之后重启mysqld服务:service mysqld restart
 
 
  三、常用命令
  1、查看默认编码格式 show variables like "%char%";     
  
  
  
  character_set_client(客户端)、character_set_connection(连接)、character_set_results(结果) 三者字符集是一致的

  2、修改数据库的编码格式

  ALTERDATABASEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;

  3、修改表的编码格式

  ALTERTABLEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;

  4、通过ALTER 修改库或者表的字符集,只是对之后插入的数据有效,原来已经存在的数据无法修改,如果需要修改原来带有数据的字符集,只能通过把原来的数据导出来,再插入到新的已经修改过字符集的表(数据库)中。

  四、建议
  1、中英文环境,linux设置系统字符集为utf8,数据库服务端,客户端,数据库,表都是utf8字符集
  2、无论是查寻还是插入,都先用set names utf8 先设置一下字符集
  3、建议建数据库语句:
  
  4、建议表语句:
  
 

MySQL学习笔记之一---字符编码和字符集的更多相关文章

  1. 吴裕雄--天生自然JAVAIO操作学习笔记:字符编码与对象序列化

    public class CharSetDemo01{ public static void main(String args[]){ System.out.println("系统默认编码: ...

  2. MySQL学习笔记5——编码

    MySQL学习笔记5之编码 编码 1.查看MySQL数据库编码 *SHOW VARIABLES LIK 'char%'; 2.编码解释 *character_set_client:MySQL使用该编码 ...

  3. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  4. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  5. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  6. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  7. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  8. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  9. MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

随机推荐

  1. javascript(jquery)_匿名函数

    一.什么是匿名函数 匿名函数:就是没有函数名的函数 二.为什么使用匿名函数 1.最大的用处就是创建闭包 三.匿名函数定义(怎么使用匿名函数) 1.这种方法使用了Function构造函数,把参数列表和函 ...

  2. 爬虫之MongoDB的图片

    聚合:

  3. 转:autofac在mvc和webapi集成的做法

    本文转自:http://www.cnblogs.com/Hai--D/p/5992573.html var builder = new ContainerBuilder(); // Mvc Regis ...

  4. 编写高效的CSS选择器

    高效的CSS已经不是一个新话题,也不是一个我非得重拾的话题,但是,它却是自我在SKY工作以后,真正感兴趣并始终关注的一个话题. 很多人或者忘记了,或者仅仅是没有意识到,CSS可以是高效的也可能导致低能 ...

  5. nyoj-1016-德莱联盟(向量叉乘判断线段相交)

    叉乘的坐标表示: A(X1,Y1), B(X2, Y2), C(XC,YC), D(XD, YD);AB = (X2-X1, Y2-Y1);CD = (XD-XC, YD-YC); 向量AB,CD的叉 ...

  6. loj 6085.「美团 CodeM 资格赛」优惠券

    题目: 一个有门禁的大楼,初始时里面没有人. 现在有一些人在进出大楼,每个人都有一个唯一的编号.现在有他们进出大楼的记录,但是有些被污染了,只能知道这里有一条记录,具体并不能知道. 一个人只有进大楼, ...

  7. 洛谷 P1062 数列

    题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是 ...

  8. linux 内核的链表操作(好文不得不转)

    以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...

  9. 洛谷【P2024】[NOI2001]食物链

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://www.luogu.org/problemnew/show/P202 ...

  10. BZOJ1293:[SCOI2009]生日礼物

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...