前言:
  一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因。
  (默认未指定字符集创建的数据库表,都是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. vue组件 Prop传递数据

    组件实例的作用域是孤立的.这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,我们需要通过子组件的props选项. prop 是单向绑定的:当父组件的属性变化时, ...

  2. cpu和gpu的区别和联系是什么

    cpu和gpu的区别和联系是什么 一.总结 一句话总结:CPU:复杂任务,核少,做串行,计算能力只是CPU很小的一部分,处理复杂逻辑: GPU:简单任务,核多,做并行(大吞吐量),做显卡的图象单元计算 ...

  3. decimal与 float的区别

      decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边.decimal 数据类型存储了一个准确(精确)的数字表达法:不存储值的近似值. 定义 decimal 的列.变量和 ...

  4. ADO.NET实体框架Entity Framework模型-基于XML解析

            最近由于项目需求,需要对实体框架内表之间的关系进行处理,主要功能要求是通过一表名,返回其在实体框架内的所有关系表.主外键及每个字段的属性.先简单描述我解决这个问题从开始到最后的分析实现 ...

  5. Linux脚本基础

    1.文本编辑 命令模式快捷键命令 命令 作用 dd 删除(剪切)光标所在整行. 5dd 删除(剪切)从光标处开始的5行. yy 复制光标所在整行. 5yy 复制从光标处开始的5行. n 显示搜索命令定 ...

  6. svn上传文件钩子

    svn钩子 钩子脚本就是shell的写法,钩子就是被某些版本库事件触发的程序. 常用钩子: post-commit:在提交完成成功创建之后执行该钩子.(提交已经完成,不可更改) 更新之后,通过邮件.微 ...

  7. 【VS外接程序】利用T4模板生成模块代码

    引言 记得第一次做asp.net mvc项目时,可以用model直接生成Html的增删改查页面, 没什么特殊要求都可以不用修改直接用了, 觉得很神奇,效率太高了.后来在做客户端开发时,发现很多模块都是 ...

  8. 水滴效果的下拉刷新--第三方开源 开源--WaveSwipeRefreshLayout

    下载地址:https://github.com/recruit-lifestyle/WaveSwipeRefreshLayout 直接把代码复制到你的项目于即可使用: 使用: 在xml中: <j ...

  9. Mybatis_总结_05_用_Java API

    一.前言 使用 MyBatis 的主要 Java 接口就是 SqlSession.你可以通过这个接口来执行命令,获取映射器和管理事务. 二.主要类 (1)SqlSession 是由 SqlSessio ...

  10. Git_学习_01_ git 安装与配置

    参考:windows下Git BASH安装 二.参考资料 1. windows下Git BASH安装