SET NAME UTF8作用

为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧

2007-05-28 09:18

Repinted:http://blog.csdn.net/class1/archive/2006/12/30/1469298.aspx

为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧(可以根据你的喜欢选择相应的编码,如gb2312),即使你现在没有加上这句也能正常访问。

先说MySQL的字符集问题。Windows下可通过修改my.ini内的

  1. # CLIENT SECTION
  2. [mysql]
  3. default-character-set=utf8
  4. # SERVER SECTION
  5. [mysqld]
  6. default-character-set=utf8

这两个字段来更改数据库的默认字符集。第一个是客户端默认的字符集,第二个是服务器端默认的字符集。假设我们把两个都设为utf8,然后在MySQL Command Line Client里面输入“show variables like “character_set_%”;”,可看到如下字符:

character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8

其中的utf8随着我们上面的设置而改动。此时,要是我们通过采用UTF-8的PHP程序从数据库里读取数据,很有可能是一串“?????” 或者是其他乱码。网上查了半天,解决办法倒是简单,在连接数据库之后,读取数据之前,先执行一项查询“SET NAMES UTF8”,即在PHP里为

  1. mysql_query("SET NAMES UTF8"); (注意大写)

即可显示正常(只要数据库里信息的字符正常)。为什么会这样?这句查询“SET NAMES UTF8”到底是什么作用?

到MySQL命令行输入“SET NAMES UTF8;”,然后执行“show variables like “character_set_%”;”,发现原来为latin1的那些变量“character_set_client”、“character_set_connection”、“character_set_results”的值全部变为utf8了,原来是这3个变量在捣蛋。查阅手册,上面那句等于:

  1. SET character_set_client = utf8;
  2. SET character_set_results = utf8;
  3. SET character_set_connection = utf8;

看看这3个变量的作用:

信息输入路径:client→connection→server;
信息输出路径:server→connection→results。

换句话说,每个路径要经过3次改变字符集编码。以出现乱码的输出为例,server里utf8的数据,传入connection转为latin1,传入results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,转化过程就为不可逆的,破坏性的。所以就转不回来了。

但这里要声明一点,“SET NAMES UTF8”作用只是临时的,MySQL重启后就恢复默认了。

接下来就说到MySQL在服务器上的配置问题了。岂不是我们每次对数据库读写都得加上“SET NAMES UTF8”,以保证数据传输的编码一致?能不能通过配置MySQL来达到那三个变量默认就为我们要想的字符集?手册上没说,我在网上也没找到答案。所以,从服务器配置的角度而言,是没办法省略掉那行代码的。

总结以下几点:

要保证select的返回与程序编码一致,即character_set_results与程序编码一致.

要保证程序编码与浏览器一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?" />一致.

SET NAME UTF8作用

时间: 2024-08-08 22:07:34

SET NAME UTF8作用的相关文章

为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧

Repinted:http://blog.csdn.net/class1/archive/2006/12/30/1469298.aspx 为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧(可以根据你的喜欢选择相应的编码,如gb2312),即使你现在没有加上这句也能正常访问. 先说MySQL的字符集问题.Windows下可通过修改my.ini内的 # CLIENT SECTION [mysql] default-character-set=utf8 # SER

【转】MySQL USE NAMES &#39;UTF8&#39;

先说MySQL的字符集问题.Windows下可通过修改my.ini内的 # CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8 这两个字段来更改数据库的默认字符集.第一个是客户端默认的字符集,第二个是服务器端默认的字符集.假设我们把两个都设为utf8,然后在MySQL Command Line Client里面输入“show variebles

PHP初识

1什么是PHP PHP(Hypetext Preprocessor)超文本预处理器,是一种服务器端.跨平台.HTML嵌入式的脚本语言,其独特的语法混合了C语言.Java语言和Perl语言的特点,只一种广泛运用的开远市的多用途脚本语言,尤其适合web开发. 2.浏览器与服务器的关系 3.js中的数据类型 基本类型 string number boolean null defined 引用类型 object(Array Math Date RegExp Object Number String Bo

Fliter(过滤器)的认识

过滤器的功能:过滤用户请求Filter的创建: 第一步:创建一个类,实现Filter接口 第二步:调用他的init方法(初始化变量用的 服务器加载的时候就加载了),调用他的doFilter方法(里面的内容是你的Filter类要实现的功能),调用他的destroy方法(销毁Filter): import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.s

jsp/servlet中的编码问题

首先声明以下只是我个人的看法,有部分观点与网上人云亦云的观点不一样,不过凡事必恭亲,我还是相信自己测试的结果 推荐一个很好地URL编码详解http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 与网上的共识是 JSP中 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

数组序列化和反序列化

<?php header("content-type:text/html;charset=utf-8"); //作用:登录处理(验证登录是否成功) //获得表单提交的用户名.密码 $userName = $_POST["userName"]; $password = $_POST["password"]; //获得user.txt中的用户列表信息 $user = ""; $handle = fopen("use

创建一个新的html元素

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> // 作用是设置网页编码为utf-8格式 <title>菜鸟教程(runoob.com)</title> </head> <body> <div id="div1"> // 唯一识别码 <p id="p1">这是一个段落.&

关于Apache默认编码错误,导致网站乱码的解决方案

最近经常有同学在使用LAMP/WAMP时,遇到这样的编码错误问题: A网站程序编码UTF-8编码安装成功,运行成功. B网站程序编gb2312也要安装在同一服务器上. 这样就出现问题了,Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的"蝌蚪文"乱码问题. 单纯的修改Apache默认编码为gb2312这样就导致A网站出现"蝌蚪文". 问题分析: 如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加

Python爬虫碎碎念

最近领导给了一个任务,从单位的数据库里面导出所有的数据,存到本地excel表格.我就想,这不挺简单的么,给我数据库的密码账户,几条语句搞定. 结果让人大失所望,单位数据库只能通过后台管理系统查看,平台压根不提供批量导出功能,至于数据库直接访问什么的,更是想都别想,大领导不给批. 所以,只能采取笨办法了,网络爬虫给爬下来! 于是乎,重拾丢弃了大半年的python.开始钻研如何写一个简单的小爬虫. python写爬虫的思路其实很简单.下面简单说下 1)python模拟登录.主要是获取cookie~