前言:
  一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因。
  (默认未指定字符集创建的数据库表,都是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. Python之单例模式总结

    一.单例模式 a.单例模式分为四种:文件,类,基于__new__方法实现单例模式,基于metaclass方式实现 b.类实现如下: class Sigletion(objects): import t ...

  2. eclipse web项目导入itellij idea并启动

    概述 主要分为项目配置和tomcat配置两大步骤. 一.项目配置 打开idea,选择导入项 选择将要打开的项目路径后,继续选择项目的原本类型(后续引导设置会根据原本的项目类型更新成idea的项目),此 ...

  3. Word 2010 怎么在每一章中使用不同的页眉

    1.要做到每一章的页眉不同首先要进行   分节 word2010中  页面布局   ->  分隔符  ->下一页 上述操作即可实现分节 2.实现分节后,在每一节开头的那一页,编辑页眉   ...

  4. 05-THREE.JS 产生大雾的效果

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  5. 32 python 并发编程之协程

    一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去 ...

  6. 剑指offer--21.链表中倒数第k个结点

    定义两个指针,当一个指针指到第K个结点时,第二个指针开始向后移动 -------------- 时间限制:1秒 空间限制:32768K 热度指数:602826 本题知识点: 链表 题目描述 输入一个链 ...

  7. python_判断字符串编码的方法

    1. 安装chardet 在命令行中,进入Python27\Scripts目录,输入以下的命令:easy_install chardet 2. 操作 import chardet f = open(' ...

  8. php是如何工作的

    a:前提条件: apache服务器启动正常工作 b:客户端浏览器在地址栏输入一个程序地栏 按回车发送请求 {请求}http://127.0.0.1/day03/1.php c:apache接收请求,并 ...

  9. c++ 修改stl set中的元素

    set的迭代器it有const修饰符,那么对它元素的修改就必然不能成功了.但是有时候遇到要修改stl set元素的问题,这个问题一般的解决方法是先erase这个元素,然后再insert,这样效率很低, ...

  10. linux 下安装rar解压

    在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本,操作如下 wget http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gz t ...