shirobert 发表于 2018-9-30 08:52:24

Mysql (三)Mysql 编码问题

  处理mysql 编码问题
  
  我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却是乱码。
  
  一、查看库、表字符集命令
  1.查看数据库支持的所有字符集
  Showcharacter set (show char set)

  
  2.查看当前状态,里面当然包括字符集的设置
  Status (/s)

  
  
  
  3.查看系统字符集设置,包括所有的字符集设置
  Showvariables like‘%char%’;


  4.查看数据表中字符集设置
  Showfull columnsfromtablename ;

  也可以查看表结构
  Showcreate tabletablename\G;

  5.查看数据库编码(数据库结构)
  Showcreate databasedbname;//创建数据库指定的字符集

  
  二、创建库表列时要指定字符集(要统一)
  1、服务器级
  在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,修改里面的character_set_server=utf8,则可设置character_set_server的值。
  2.数据库级
  Createdatabase   dbname defaultcharacterset utf8;

  注意,如果不指定默认的字符集,则系统会根据character_set_database的值进行设置
  3.表级
  Createtable dbname.tbname(id varchar(20) not null, name vharchar(20))engine=innoDBdefault

  注:定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都为utf8。如果没有定义表的默认字符集,则他会按照character_set_database的值来设置
  
  4.列级
  Createtable db1.tb2(idvarchar(20)not null, namevarchar(20)character set utf8);

  注:如查没有指定列字符集、就使用表字符集、如查指定了就使用指定的。
  图中:showcreate table db1.tb2//是查看表结构
  
  三、修改字符集
  1.修改character_set_connection、character_set_client、character_set_results三值
  对于一个连接来说、可以用
  Set namesutf8来使用上面三个值改成utf8;

  Set name‘charset_name’; 相当于
  Set character_set_client = charset_name;
  SET character_set_results = charset_name;
  SET character_set_connection = charset_name;
  
  2.修改character_set_database字段(也就是改数据库字符集)
  Alterdatabase db_namedefaultcharacter setcharset_name;
  

  
  3.修改character_set_server字段
  最简单的方法是直接改my.ini配置文件里面的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。
  
  4.修改表的字符集
  Altertable tbnamedefaultcharacter setcharsetname;
  Altertable tb1defaultcharacter setutf8
  
  5.修改列的字符集
  Altertable tbnamemodifyage varchar(30)characterset utf8;
  
  总结:
  1、建库、建表、建字段设置统一编码。
  2、PHP作为mysqle服务器客户端、连接编码set names utf8/gbk;
  3、设置php返回给浏览器数据的编码。(Content-Type,header(),)
  
  header("Content-type:text/html;charset=utf-8");
  4、Php文件本身保存的编码(文件编码、通过文本编辑器设置)
  5、安装mysql时设置好编码。(装好后可修改my.ini)
  
  

页: [1]
查看完整版本: Mysql (三)Mysql 编码问题