我设置了MySQL的编码为utf8,浏览器从数据库读出数据在页面上却是乱码,怎么解决呢?

作者&投稿:唱贩 (若有异议请与网页底部的电邮联系)
mysql数据库中存进的是中文,为什么查出来的乱码?~

一、转码失败在数据写入到表的过程中转码失败,数据库端也没有进行恰当的处理,导致存放在表里的数据乱码。针对这种情况,前几篇文章介绍过客户端发送请求到服务端。其中任意一个编码不一致,都会导致表里的数据存入不正确的编码而产生乱码。比如下面简单一条语句:set @a = "文本字符串";insert into t1 values(@a);
变量 @a 的字符编码是由参数 CHARACTER_SET_CLIENT 决定的,假设此时编码为 A,也就是变量 @a 的编码。
2. 写入语句在发送到 MySQL 服务端之前的编码由 CHARACTER_SET_CONNECTION 决定,假设此时编码为 B。
3. 经过 MySQL 一系列词法,语法解析等处理后,写入到表 t1,表 t1 的编码为 C。那这里编码 A、编码 B、编码 C 如果不兼容,写入的数据就直接乱码。
二、客户端乱码表数据正常,但是客户端展示后出现乱码。这一类场景,指的是从 MySQL 表里拿数据出来返回到客户端,MySQL 里的数据本身没有问题。客户端发送请求到 MySQL,表的编码为 D,从 MySQL 拿到记录结果传输到客户端,此时记录编码为 E(CHARACTER_SET_RESULTS)。那以上编码 E 和 D 如果不兼容,检索出来的数据就看起来乱码了。但是由于数据本身没有被破坏,所以换个兼容的编码就可以获取正确的结果。这一类又分为以下三个不同的小类:
1)字段编码和表一致,客户端是不同的编码比如下面例子, 表数据的编码是 utf8mb4,而 SESSION 1 发起的连接编码为 gbk。那由于编码不兼容,检索出来的数据肯定为乱码。
2)表编码和客户端的编码一致,但是记录之间编码存在不一致的情形比如表编码是 utf8mb4,应用端编码也是 utf8mb4,但是表里的数据可能一半编码是 utf8mb4,另外一半是 gbk。那么此时表的数据也是正常的,不过此时采用哪种编码都读不到所有完整的数据。这样数据产生的原因很多,比如其中一种可能性就是表编码多次变更而且每次变更不彻底导致(变更不彻底,我之前的篇章里有介绍)。举个例子,表 t3 的编码之前是 utf8mb4,现在是 gbk,而且两次编码期间都被写入了正常的数据。
3)每个字段的编码不一致,导致乱码和第二点一样的场景。不同的是:非记录间的编码不统一,而是每个字段编码不统一。举个例子,表 c1 字段 a1,a2。a1 编码 gbk,a2 编码是 utf8mb4。那每个字段单独读出来数据是完整的,但是所有字段一起读出来,数据总会有一部分乱码。
三、LATIN1还有一种情形就是以 LATIN1 的编码存储数据估计大家都知道字符集 LATIN1,LATIN1 对所有字符都是单字节流处理,遇到不能处理的字节流,保持原样,那么在以上两种存入和检索的过程中都能保证数据一致,所以 MySQL 长期以来默认的编码都是 LATIN1。这种情形,看起来也没啥不对的点,数据也没乱码,那为什么还有选用其他的编码呢?原因就是对字符存储的字节数不一样,比如 emoji 字符 "❤",如果用 utf8mb4 存储,占用 3 个字节,那 varchar(12) 就能存放 12 个字符,但是换成 LATIN1,只能存 4 个字符。

这个是因为字符编码的原因,请参看我百度空间的文章:
http://hi.baidu.com/heyongsai/item/8b46992aa3a9404446996289

中文乱码问题经常会出现
1、数据库、数据表、字段 编码格式要保持一致
2、如果在doc界面录入数据,要保持当前编码格式与数据表编码格式一致
3、php读取数据显示,要保持文件的编码格式、html页面的编码格式同数据库一致,编码格式为utf-8或gb2312或gbk
4、php连接数据库之后mysql_query('set names gbk')

你的问题应该是数据库编码格式不是utf-8,查看一下



如图在页面上单机右键,选择编码——utf-8 ,一般来说浏览器都可以这样设置编码集,如果出现没有的话,在其他地方也会有的



乱码的原因是多方面的:
1、数据库 建立的时候需要设置编码utf8,之后再建立表格
可以使用mysql控制台,查看表格中是否为乱码
2、建立到mysql的链接时需要设定连接的编码为utf8
3、页面html的编码也会影响数据显示的状态
4、浏览器的编码设定也有影响

使用数据库时先执行sql语句set names utf8

你的php文件没设置字符集
header('content-type:text/html;charset=utf-8');


MySQL如何设置小数位数mysql中保留几位小数
MySQL如何设置小数位数?MySQL是广泛使用的关系数据库管理系统,它允许用户存储和操纵数据。在MySQL中,小数是一种重要的数据类型,有时需要精确控制小数位数。本文将介绍如何在MySQL中设置小数位数。1. DECIMAL数据类型 DECIMAL是MySQL中用于存储小数的数据类型之一,它可以存储非常大的数字并保留精确的小数位数...

如何解决MySQL无法自动启动的问题mysql不能自启动
方法一:设置MySQL服务为自动启动 1.按下“Win + R”键,输入“services.msc”打开“服务”窗口。2.在其中找到MySQL服务,右键单击选择“属性”。3.在“属性”窗口中选择“启动类型”,将其设置为“自动”。4.点击“应用”和“确定”按钮,然后重启计算机,MySQL服务就会自动启动。方法二:修改MySQL...

MySql怎么给列设置默认值 mysql修改默认值
Mysql数据库的好处我就不多说了,本咗嚛针对平时常见的一个问题。Mysql新建的表怎么给列设置默认值,简单提供几个常见的情况希望能帮到小伙伴。新建设置默认值命令语法如下 createtable表名(列名称数据类型default默认值);如果图形化界面操作,如phpmyadmin的话,一般直接默认值就可以设置选择呢 修改数据库表...

MySQL中Reload使用方法简介mysql中reload
2.刷新MySQL权限设置 当你从MySQL使用者的角度进行操作时,你必须拥有足够的权限才能执行查询和操作。如果你被拒绝访问某个表或者数据库,可能是因为你的权限没有相应地配置。使用以下命令可以刷新MySQL的权限设置:FLUSH PRIVILEGES;刷新MySQL权限设置时,需要注意以下几点:1)必须使用MySQL账户的有效密码才能...

MySQL中如何设置默认时间mysql默认时间设置
MySQL设置默认时间是将日期和时间类型的值自动设置为当前时间或指定时间。MySQL中支持三种不同的方式来设置默认时间:使用不带参数的 DEFAULT 子句、使用 DEFAULT CURRENT_TIMESTAMP 或指定一个常量值。首先,如果您想在MySQL中设置默认时间,可以使用不带参数的 DEFAULT 字句:ALTER TABLE table_name ADD ...

mysql字段长度设置多少合适
预留适当的长度可以减少后期调整的麻烦。同时,对于动态变化的数据,动态长度类型(如TEXT或BLOB)可以随数据量的增长而调整,保持资源的最佳利用。总的来说,设置MySQL字段长度时,应以实际需求为基础,既要考虑当前数据的大小,也要预见未来可能的增长,以达到空间利用的最大化和数据库管理的高效性。

mysql怎么设置可以远程连接mysql怎么设置可以远程连接打印机_百度知 ...
如何设置mysql允许远程连接数据库?首先,我们在linux系统上安装mysql。默认情况下,linux系统可以联网,或者已经挂载了CDiso。我们使用apt-getinstallmysql-server命令来安装它。安装完成后,检查MySQL是否启动,执行命令ps-egrepmysql。 请点击进入图片说明。 验证开始时是否允许远程连接。由于这个虚拟机的IP是192.168.2.120,我们...

MySQL服务器最大连接数怎么设置才合理
如果mysql 连接数据设置不合理可能会导致很小的流量mysql就提示MySQL: ERROR 1040: Too many connections错误了,那么要如何才算是合理设置mysql最大连接数呢,下面我来给大家介绍介绍。 MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体

从命令行操作MySQL数据库探索CMD连接SQL语句cmd连接mysql语句
2. 设置MySQL的路径 为了使命令行可以操作MySQL数据库,您需要将MySQL的可执行文件夹路径添加到环境变量中。将MySQL的 bin 文件夹路径加入环境变量中可以告诉操作系统到哪里找到MySQL的可执行文件。根据安装位置,例如我的 MySQL 安装目录在 C:\\Program Files\\MySQL\\ MySQL Server 8.0,那么您应该使用以下...

mysql数据库sort_buffer_size设置1024*1024是多大,还可以
设置MySQL数据库sort_buffer_size参数至1024*1024字节,即1MB,是否可以加大?答案并非绝对。默认值为1MB,修改此值在大型排序查询(大表且无索引排序字段)中并未观察到显著性能差异,说明默认配置通常足够。需注意,修改参数值前,确保理解其功能,避免意外后果。在MySQL及类似数据库系统中,类似sort_buffer...

金川区18412993202: 我设置了MySQL的编码为utf8,浏览器从数据库读出数据在页面上却是乱码,怎么解决呢? -
自仇英罗: 中文乱码问题经常会出现1、数据库、数据表、字段 编码格式要保持一致2、如果在doc界面录入数据,要保持当前编码格式与数据表编码格式一致3、php读取数据显示,要保持文件的编码格式、html页面的编码格式同数据库一致,编码格式为utf-8或gb2312或gbk4、php连接数据库之后mysql_query('set names gbk') 你的问题应该是数据库编码格式不是utf-8,查看一下

金川区18412993202: 将mysql字符编码修改为utf8有什么后果 -
自仇英罗: 可能会造成乱码,因为之前如果使用的是GBK,你将整体数据库改为UTF-8之前的数据就会变成乱码的.

金川区18412993202: mysql怎么设置成utf - 8编码 -
自仇英罗: 检查当前数据库编码.使用语句:show variables like '%character%'; show variables like'%collation%'; 如果不是以上情况,需要将mysql编码设置为utf-8.具体步骤如下:如果安装mysql时安装了“MySql Sever Instance Configuration ...

金川区18412993202: 怎样更改MySQL数据库编码为UTF - 8或者GB2312,应该怎么做? -
自仇英罗: 以更改为UTF-8为例,GB2312雷同. 1、关闭mysql服务(以下为命令行中执行) view plaincopy service mysql stop 2、修改 /etc/mysql/my.cnf (默认的安装路径) view plaincopy vim /etc/mysql/my.cnf 打开my.cnf后,在文件内的[mysqld]下增加如...

金川区18412993202: mysql乱码怎么解决 -
自仇英罗: 1、修改安装文件根目录下的my.ini文件:搜索字段default-character-set,设置其值为utf8/gbk之一(注意设置utf8的时候不能设成utf-8) 再去重启MySQL服务器 如果还是出现乱码,接着执行下面操作2、修改数据库编码 在安装目录的data目录下...

金川区18412993202: MySQL安装时就都设置编码为UTF - 8,但是不能输入中文,谁给我一个有效得解决办法,不要是该编码形式得! -
自仇英罗: 输入、输出时同一种编码——UTF8,连接数据库后马上给他转换编码:set names "utf8";

金川区18412993202: 如何设置mysql数据库为utf - 8编码 -
自仇英罗: 如何设置mysql数据库为utf-8编码 mysql> show variables like '%chara%';+--------------------------+--------------------------+ | Variable_name | Value |+--------------------------+--------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | ...

金川区18412993202: 怎么将数据库的编码改成utf - 8 -
自仇英罗: mysql数据库的默认编码并不是utf-8,所以需要将数据库的编码改成utf-8. 具体的方法步骤如下:安装mysql后,启动服务并登陆,使用show variables命令可查看mysql数据库的默认编码: 由上图可见database和server的字符集使用了latin1编...

金川区18412993202: 如何设置mysql输入utf8 -
自仇英罗: 建表时通过“charset=utf8”设置或者“mysql> ALTER TABLE `table_name` charset=utf8;”设置

金川区18412993202: mysql客户端窗口的编码怎么改成UTF - 8的 -
自仇英罗: 一、Windows1、中止MySQL服务2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭4、启动MySQL服务 二、Linux...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网