一文搞定Mysql 乱码问题

系统管理员 2023-05-30 09:06 104阅读 0赞

处理**mysql 编码问题**


我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却是乱码。


一**、查看库、表字符集命令**

1.**查看数据库支持的所有字符集**

Show character set (show char set)

wKioL1m9zkHDt9iJAAB9UnFgQSM364.png-wh\_50


2.**查看当前状态,里面当然包括字符集的设置**

Status (**/s**)

wKiom1m9znzyP5sBAABboazaVnM666.png-wh\_50




3.**查看系统字符集设置,包括所有的字符集设置**

Show variables like ‘%char%’;

wKioL1m9zmGAMvXNAAA5k3EFZkA197.png-wh\_50

wKiom1m9zpCA64ygAALCcrYV-cg330.png-wh\_50

4.**查看数据表中字符集设置**

Show full columns from tablename ;

wKiom1m9057Q7vAoAADOk-a3ZLs531.jpg-wh\_50

也可以查看表结构

Show create table tablename\G;

wKiom1m9zreSb5v5AABvkrs91eM479.png-wh\_50

5.**查看数据库编码(数据库结构)**

Show create database dbname;//**创建数据库指定的字符集**

wKioL1m9zpXy3CvyAAAbwJNOKuM224.png-wh\_50


二、**创建库表列时要指定字符集(要统一)**

1****服务器级

在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。

2.**数据库级**

Create database dbname default character set utf8;

wKiom1m9zs\_QZYg-AAA6dvRUG3o428.png-wh\_50

注意,如果不指定默认的字符集,则系统会根据character_set_database的值进行设置

3.**表级**

Create table dbname.tbname(id varchar(20) not null, name vharchar(20))engine=innoDB default charset=utf8;

wKioL1m91H2S-jqJAADJFLl2rCA216.jpg-wh\_50

:定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都为utf8。如果没有定义表的默认字符集,则他会按照character_set_database的值来设置


4.**列级**

Create table db1.tb2(id varchar(20) not null, name varchar(20) character set utf8);

wKiom1m9zt7DdDvSAABoblrR9gk273.png-wh\_50

注:如查没有指定列字符集、就使用表字符集、如查指定了就使用指定的。

图中:**show create table db1.tb2//**是查看表结构


三、修改字符集

1.**修改character_set_connectioncharacter_set_clientcharacter_set_results三值**

对于一个连接来说、可以用

Set names utf8**来使用上面三个值改成**utf8;

wKioL1m9zrejI8kVAABCfVtrvX8561.png-wh\_50

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字段(也就是改数据库字符集**)

Alter database db_name default character set charset_name;


wKiom1m9zu3irdigAABG1PbfAmY829.png-wh\_50


3.**修改character_set_server字段**

最简单的方法是直接改my.ini配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。


4.**修改表的字符集**

Alter table tbname default character set charsetname;

Alter table tb1 default character set utf8


5.**修改列的字符集**

Alter table tbname modify age varchar(30) character set 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)**

公众号 关注一波 (一叶知秋博客)

不定期分享视频资料

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Nzd3F6eA_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL性能调优

    数据库的操作越来越成为整个应用的性能瓶颈,这对于Web应用尤其明显。关于数据库的性能,这并不只是DBA需要关心的,而更是后端开发需要去关注的事情。 所以本文讲解MySQL在各

    相关 Scala

    第一节:概述 为什么学习Scala ? Apache Spark 是专为大规模数据快速实时处理的计算引擎/内存级大数据计算框架。Apache Spark 是由Sca