关于php读mysql数据库时出现乱码的解决方法

关于php读mysql数据库时出现乱码的解决方法

php读mysql时,有以下几个地方涉及到了字符集。
1.建立数据库表时指定数据库表的字符集。例如

  • create table tablename
  • (
  • id int not null auto_increment,
  • title varchar(20) not null,
  • primary key (‘id‘)
  • )DEFAULT CHARSET =UTF8;

复制代码
2. mysql的字符集
mysql中有三个重要的变量,character_set_client,character_set_results,character_set_connection。
通过设置character_set_client,告诉Mysql,PHP存进数据库的是什么编码方式。
通过设置character_set_results,告诉Mysql,PHP需要取什么样编码的数据。
通过设置character_set_connection,告诉Mysql,PHP查询中的文本,使用什么编码。

3. 连接数据库后,设置数据库间传输字符时所用的默认字符编码。
使用mysqli::set_charset()或mysqli::query(‘set names utf8‘),进行设置。
尽量使用mysqli::set_charset(mysqli:set_charset)而不是”SET NAMES”

  • $db = new mysqli(‘localhost‘,‘user‘,‘passwd‘,‘database_name‘);
  • $db->set_charset(‘utf8‘);

复制代码
注意是utf8,不是utf-8
(这里有个问题就是,数据库和php都已经统一了编码,但是如果没有调用mysqli::set_charset()函数时,读出数据时仍然会出现乱码。这是为什么?)
(另,set names utf8相当于下面三句
SET character_set_client = utf8;
SET character_set_results = utf8; 
SET character_set_connection = utf8; 

4. html页面使用的字符集。在meta标签中设置

  • <meta http-equiv="content-type" content="text/html; charset=utf-8">

复制代码
5. php文本文件所使用的字符集。
在linux下可以用vim打开文件,输入
:set encoding
查看文件使用的字符集

要保证不乱码,需要保证文件自身的编码,HTML里指定的编码,PHP告诉Mysql的编码(包括character_set_client和character_set_results)统一。同时使用mysqli:set_charset()函数或”SET NAMES”。

针对“3”后面的问题,写了几个例子,测试链接数据库后,设置和不设置字符集时的结果。测试环境Ubuntu 12.04,MySQL 5.5,php 5.5.7。
结果如下:
(1) 数据库表字符集是utf8,不使用set names utf8
能正常插入、读出中文,但是在mysql中显示乱码

(2) 数据库表字符集是utf8,使用set names utf8
能正常插入、读出中文,mysql中显示正确

(3) 数据库表字符集不是utf8,使用set names utf8
mysql中显示,读出都是问号。

php教程选自零零H5

时间: 2024-11-17 08:59:44

关于php读mysql数据库时出现乱码的解决方法的相关文章

web 项目:解决插入 MySQL 数据库时中文乱码问题

背景:在做 javaweb 项目的时,前台传递的中文最后插入数据库的时候总是出现乱码现象. 解决方案 ? A.不管是使用 Idea.eclipse,确定自己的项目所使用的字符集是 UTF-8. ? B.查看 MySQL的字符集是否是 UTF-8.打开 Dos 窗口,输入:mysql -u root -p, 在输入密码即可进入数据库.进入数据库输入命令 :show variables like 'character%';查看数据库的字符集,如下图: ? MySQL 的默认编码是 Latin1,不支

php读取mysql中文数据出现乱码的解决方法

最为简单的方法就是编程访问 MySQL时,添加一行代码:mysql_query("SET NAMES 'GBK'"); 1.PHP页面语言本身的编码类型不合适,这时候,你直接在脚本中写的中文肯定是乱码,不用说数据库了. 解决方法:选择'UTF8'或者'gb2312',这样客户浏览器会自动选择并出现正确的中文显示.注意:'UTF8'或者'gb2312'都可以正确显示中文的. 2.数据库MySQL中的编码类型不正确. 解决方法:创建数据库的时候,MySQL 字符集选择'UTF8',MySQ

mysql数据库主从不同步的解决方法

故障描述: 进入从数据库 mysql> show slave status\G; 结果如下: ... Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1062 ... 原因: 程序可能在slave上进行了写操作 可能是slave机器重启后,事物回滚造成的 多数是第二种造成的 解决方法一:忽略错误后继续同步 该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 mysql> slave stop;m

关于MySQL数据库错误号码2003的解决方法

一.问题如下 二.解决方法 重启服务 右键我的电脑,选择管理属性,单击进去 选择服务目录,查找MySQL项目,双击启动. 原文地址:https://www.cnblogs.com/guo7533/p/8448216.html

C# mysql 插入数据,中文乱码的解决方法

用C#操作mysql时, 插入数据中文都是乱码,只显示问号,数据库本身使用的是utf-8字符 有两种解决办法: 一种是在执行语句前面设置,如: 1 MySQLCommand mCommand = new MySQLCommand("set names gb2312", m_Connection); 另一种是直接加在连接字符串里,如: 1 <add name="connection" connectionString="server=127.0.0.1

php提交表单内容有单引号,mysql执行时遇见错误的解决方法。

首先看一下问题所在. "INSERT INTO tg_article( tg_username, tg_type, tg_title, tg_content, tg_date ) VALUES( '{$_clean['username']}', '{$_clean['type']}', '{$_clean['title']}', '{$_clean['content']}', NOW() ) " 大家会发现党要提交的内容还有单引号的时候,value是里面就会出现单引号套单引号,这是明显

Ubuntu用作Server时出现乱码的解决方法

下面给出解决办法: 1.用vi编辑器修改/etc/default/local文件 2.把原来的中文编码替换成下面的 LANG="en_US.UTF-8" LANGUAGE="en_US:en" 3.注销系统,重新登录就OK了

Asp.net导出Excel乱码的解决方法

通过跟踪Asp.net服务器代码,没有乱码,然而导出Excel到浏览器后,打开时出现乱码. 解决方法是添加编码格式的前缀字节码:Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); ? 1 2 3 4 5 6 7 8 9 10 11 12 13 Response.Clear(); Response.AddHeader("content-disposition","attachment;filenam

在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码。

            在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码. 这个问题困惑了我很久,也走了很多弯路.经过不断的探究终于找到了问题的解决方案. 第一:查看自己的mysql的编码.cmd->mysql –uroot –p -->输入自己的mysql的密码->输入 SHOWVARIABLES LIKE 'character%';(如果装mysql时默认安装的话,会出现很多latin1,而不是我下面的全部utf-8,这是因为mysql默认的编码是lati