php连接数据库输出的中文几个字就…

我们首先假设数据库中采用的编码为UTF-8
这时我们在PHP页面中应当首先添加

  1. "Content-Type" content="text/html; charset=utf-8" />

文件保存时的编码类型也必须是utf-8。

之后在数据库查询前添加

  1. mysql_query("set names 'utf8'");

注:这句代码的插入位置,应该插入在显示数据的代码前,否则就没有意义了,也可以尝试加在数据库链接文件的最后,便于每个页面都可以一次性添加好,如果要录入繁体字,还可以尝试更改为GBK试试

该行语句的编码值也应当与上面的编码值一样。

总而言之,网页保存的编码类型、网页的charset=utf-8、和执行的set names utf8语句的编码方式应当一致

下面网上都有引用 这里也摘录如下 有待细细斟酌

MySQL的“SET NAMES x”字符集问题分析

近来接受BBT的培训,做一个投票系统。系统代码倒不是很难,但是我的时间主要花费在了研究字符集和编码上面。MySQL和Apache两个系统的 编码(字符集)问题让我费劲脑筋,吃尽苦头。网上对这些问题的解决比较零散,比较片面,大部分是提供解决方法,却不说为什么。于是我将这几天收获总结一 下,避免后来者再走弯路。这篇文章对PHP编写有一点帮助(看完你就知道,怎样让你的PHP程序在大部分空间提供商的服务器里显示正常),但是更多帮助在 于网络服务器的架设和设置。

先说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 variebles 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 variebles 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来达到那三个变量默认就为我们要想的字符集?手册上没说,我在网上也没找到答案。所以, 从服务器配置的角度而言,是没办法省略掉那行代码的。

总结:为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧,即使你现在没有加上这句也能正常访问。

 

转载于:https://www.cnblogs.com/qmsu/p/3832503.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android开启服务器配置,Android基于XMPP开发(一)【openfire服务器配置】

OpenFireOpenFire 是采用Java开发的基于XMPP(Jabber)协议,开源实时协作(RTC)服务器。Smack 是用 Java编 写的XMPP客户端代码库,是 spark 的核心开源界总是有许多有趣的东东,这三个合起来就是一个完整的XMPP IM 实现。OpenFire ——服务器端Sp…

Python 生成器 迭代器

1.1 生成器通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素&#x…

寻路基本工具类定义 AIDefine.cpp

1 #include "AIDefine.h" 2 3 PointI AI_FindHelpPoint[8] {PointI(-1,0),PointI(0,-1),PointI(1,0),PointI(0,1),PointI(-1,-1),PointI(1,-1),PointI(1,1),PointI(-1,1)}; 转载于:https://www.cnblogs.com/liusijian/p/3438542.html

android相对布局代码,Android基础_3 Activity相对布局(示例代码)

相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的。相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,这些位置都是相对的,确定出了其中一个控件的位置就可以确定另一个控件的位置了。…

WSDL文件生成WEB service server端C#程序

一般一个已经实现功能的WEB Server会发布自己的WSDL文件,供客户端生成代理类。 但有时是先有的server与client交互的接口定义(WSDL)文件,然后由server和client端分别写程序,一个提供web服务,一个使用web服…

php二维数组排序 按照指定的key 对数组进行排序

2019独角兽企业重金招聘Python工程师标准>>> /*** desc arraySort php二维数组排序 按照指定的key 对数组进行排序* param array $arr 将要排序的数组* param string $keys 指定排序的key* param string $type 排序类型 asc | desc* return array*/ function arrayS…

剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 输入:每个测试案例包…

13个代码注释的小技巧

13个代码注释的小技巧 这篇文章是由Jos M. Aguilar在他卓越的博客中以西班牙语的形式首发,其后Timm Martin在获得Aguilar先生的授权下,对该文章进行翻译、修改,并且在DevTopics上发布。 以下13个小技巧可以使得你的代码在长时间内依然能够保…

android webview onconsolemessage,Android WebView一些特殊的使用

在Android5.0之前,webView默认是允许加载混合网络协议内容的;在5.0以上,默认不允许加载http和https的混合内容if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {webView.getSettings().setMixedContentMode(WebSettings.MIXED…

让您的Xcode键字如飞

2019独角兽企业重金招聘Python工程师标准>>> 作者:吴白(微博) 手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷。优秀的程序员总是这么一群人,他们不拘于现状,不固步自封,他们喜欢…

【Android Developers Training】 6. 配置Action Bar

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。 原文链接:http://developer.android.com/training/basics/actionbar/setting-up.html 配…

android 7 创建文件夹,Android 在 res/layout 文件夹 下创建一个 子文件夹实例

Android 资源文件夹 Layout 文件夹Layout文件是存放Android的布局文件的资源文件夹,但是如果你想要在里面创建子文件夹,你会发现xml文件报错。如何在Layout文件夹下方创建Layout的子文件夹。这边我们需要著一个一个点就是我们的Layout 文件夹是属于资源文…

一步一步学NUnit

转载:http://tech.sina.com.cn/s/2009-07-17/1129988785.shtml 单元测试基础知识 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定…

面向对象JS编程(一)——创建对象

1.普通模式 var person new Object();person.name "Laughing";person.age 28;person.job "Software Engineer";peron.sayName function(){ alert(this.name);};person.sayName(); 缺点:创建多个对象时,会产生大量的重复代码…

android功耗iphone,是心目中的安卓小屏旗舰吗?iPhone 8尺寸大小,4000mAh电池容量...

相信很多人都都喜欢小屏手机,但因为小屏手机总体需求不多,而且相对大屏更不好做,所以手机商都不愿意做小屏手机,这也导致市面上小屏手机非常少,苹果推出了iPhone 12 Mini,但是因为电池只有2200mAh&#xff…

mySQL 数据库错误

2019独角兽企业重金招聘Python工程师标准>>> java.sql.SQLException: The user specified as a definer (..%) does not exist 视图、存储过程的使用者若非其创建者,就会出现这样的错误 可以修改用户的权限或重新创建进行解决 转载于:https://my.oschina…

委托、事件的个人理解

事件:一个用event进行了封装的委托类型的变量,使得在进行注册的时候只能使用 或者- 需要一个触发者和一个执行者,类似于Observer模式中的Subject和Observer(当一个对象的状态发生改变时,所有依赖于他的对象都会得到通知…

android 组建水平居中,Android开发借助LinearLayout实现垂直水平居中布局

释放双眼,带上耳机,听听看~!在Android应用程序的开发中,有时需要限制水平和垂直屏幕的切换,今天这篇文章是技术狗小编为大家整理的Android应用借助LinearLayout实现垂直水平居中布局,希望对你学习这方面有所…

我不想再活在别人的世界里

我过多的关注别人的世界。 却没有去寻找属于自己的故事 总是犹豫着要不要出发 然后发现 一天就这么过去了。 转载于:https://www.cnblogs.com/zjjsxuqiang/p/3445392.html

面壁人VS智子 --- 搜索排序的作弊和反作弊

搜索引擎已经是目前网络流量最大入口,在大搜上,基本上大家打开网页做的第一件事情就是打开一个搜索引擎,然后键入你感兴趣的内容,然后开始浏览。如果是个电商的网站,你打开以后,基本上也是直接键入你感兴趣…