前言:
  一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因。
  (默认未指定字符集创建的数据库表,都是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. hdu 5890 Eighty seven 暴力+bitset优化背包

    Eighty seven Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) P ...

  2. JMeter ——Test fragment

    fragment 为片段,可以是一个不完整的用例.比如你可以把一个http请求保存为fragment,如果不这样做的话,你是必须先要添加一个测试计划-线程组-http请求的.你可以把某步骤一系列的请求 ...

  3. QT Creator 代码自动补全

    QT Creator 代码自动补全 用QT Creater编程,如果没有自动补全是很痛苦的事情,于是便查阅了QT的文档,发现CTRL+SPACE是自 动补全的快捷键;但是在 Creater里使用居然没 ...

  4. ie 元素兼容性总结

    css 属性元素 2.z-index 正常按自身层级决定显示顺序,在ie6 7 还需要依赖于父级的层级决定,排布在后边的元素排在前面.后来者居上覆盖前者. IE6,7支持inline元素转换成inli ...

  5. Redis缓存集群方案

    由于单台Redis服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧下降,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境 ...

  6. C++初始化小问题

    #include<; } 发现,没有对string进行初始化,就已经默认可以使用,并且是空串,一直用java,对c++不熟悉.搜索了下,发现在c++中,只要对对象进行了定义,如果没有初始化,就会 ...

  7. Sublime Text 3 (含:配置 C# 编译环境)

    Sublime Text 3http://www.sublimetext.com/3http://www.sublimetext.com/3dev 1. 关闭自动更新   菜单:Preferences ...

  8. swagger 在apache CXF 中的使用——JAX-RS Swagger2Feature

    The CXF Swagger2Feature allows you to generate Swagger 2.0 documents from JAX-RS service endpoints w ...

  9. IDEA+testng,输出没有test-output目录

    参考:http://www.cnblogs.com/veitch-623/p/6192601.html 在Edit Configurations里 使用默认报告就行

  10. 搭建了一个Apache+Php+MySQL的服务器。要如何通过Apache发布网站使得其他的电脑可以通过局域网访问?

         源址: 1.网站的代码放在文件夹“www”下: 2.配置apache允许他人访问网站:在wamp/apache/apache版本/conf的httpd.conf文件修改代码如下: Optio ...