仓酷云

标题: PHP网页设计小谈MySQL字符集 [打印本页]

作者: 若相依    时间: 2015-2-4 00:13
标题: PHP网页设计小谈MySQL字符集
实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。mysql   起首,这片文章地道是我的团体经历之谈,合用于我罕见的情况及项目中.
团体建议,数据库字符集尽可能利用utf8(HTML页面临应的是utf-8),以使你的数据能很顺遂的完成迁徙,由于utf8字符集是今朝最合适于完成多种分歧字符集之间的转换的字符集,虽然你在号令行东西上能够没法准确检查数据库中的内容,我仍然激烈建议利用utf8作为默许字符集.
接上去是完全的一个例子:
1.创立数据库表
mysql>CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;
#注重前面这句话 "COLLATE utf8_general_ci",大请安思是在排序时依据utf8校验集来排序
#那末在这个数据库下创立的一切数据表的默许字符集城市是utf8了
mysql>create table my_table (name varchar(20) not null default '')type=myisam default charset utf8;
#这句话就是创立一个表了,制订默许字符集为utf8
2.写数据
例子1是经由过程php直接拔出数据:
a.php
<?php
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
//请注重,这步很关头,假如没有这步,一切的数据读写城市不准确的
//它的感化是设置本次数据库联接过程当中,数据传输的默许字符集
//其他编程言语/接口也相似,例如 .net/c#/odbc
//jdbc则设置毗连字符串为相似"jdbc:mysql://localhost/db?user=user&password=123456&useUnicode=true&characterEncoding=UTF-8"
mysql_query("set names utf8;");
//必需将gb2312(当地编码)转换成utf-8,也能够利用iconv()函数
mysql_query(mb_convet_encoding("insert into my_table values('测试');", "utf-8", "gb2312"));
?>
例子是经由过程页面提交拔出数据2:
b.php
<?php
//输入本页编码为utf-8
header("content-type:text/html; charset=utf-8");
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
if(isset($_REQUEST['name'))
{
//因为下面已指定本页字符集为utf-8了,因而无需转换编码
mysql_query(sprintf("insert into my_table values('%s');", $_REQUEST['name']));
}
$q = mysql_query("select * from my_table");
while($r = mysql_fetch_row($q))
{
print_r($r);
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="" method="post">
<input type="text" name="name" value="">
<input type="submit" value='submit'>
</form>
自此,利用utf8字符集的完全的例子停止了.
假如你想利用gb2312编码,那末建议你利用latin1作为数据表的默许字符集,如许就可以直接用中文在号令行东西中拔出数据,而且可以直接显示出来.而不要利用gb2312或gbk等字符集,假如忧虑查询排序等成绩,可使用binary属性束缚,例如:
create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;
附1:旧数据晋级举措
以本来的字符集为latin1为例,晋级成为utf8的字符集。本来的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)。
第一步:导出旧数据
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql
第二步:转换编码(相似unix/linux情况下)
iconv -t utf-8 -f gb2312 -c old.sql > new.sql
或可以去失落 -f 参数,让iconv主动判别本来的字符集
iconv -t utf-8 -c old.sql > new.sql
在这里,假定本来的数据默许是gb2312编码。
第三步:导入
修正old.sql,在拔出/更新语句入手下手之前,增添一条sql语句: "SET NAMES utf8;",保留。
mysql -hlocalhost -uroot my_db < new.sql
半途而废!!
附2:撑持检查utf8字符集的MySQL客户端有
1.) MySQL-Front,听说这个项目已被MySQL AB迫令中断了,不知为什么,假如国际还有很多破解版可以下载(不代表我保举利用破解版 :-P)。
2.) Navicat,另外一款十分不错的MySQL客户端,汉化版刚出来,还约请我试用过,总的来讲仍是不错的,不外也需求付费。
3.) PhpMyAdmin,开源的php项目,十分好。
4.) Linux下的终端东西(Linux terminal),把终真个字符集设置为utf8,毗连到MySQL以后,履行 SET NAMES UTF8; 也能读写utf8数据了。
附3:直接利用MySQL供应的 ALTER 语法转换字符集
这对宽大非utf8又想转成utf8的用户来讲,是个天大的喜信,我也是在进修MySQL手册是才发明的。详细用法以下:
ALTER TABLE OLD_TABLE CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];
转换之前,记得要先备份旧表,以防万一。上面是一个实践的例子:
ALTER TABLE `t_yejr` CONVERT TO CHARACTER SET UTF8;
这个办法应当是从MySQL 4.1才入手下手供应的,人人可以反省一下本人的版本是不是撑持,假如不撑持,只好依照下面提到的转换了。enjoy it!!!


学习了六个多月PHP了,还是个新手,在这里受到了很多人的帮助,谢谢你们!
作者: 若天明    时间: 2015-2-4 08:54
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 飘飘悠悠    时间: 2015-2-9 20:56
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
作者: 谁可相欹    时间: 2015-2-9 23:02
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 海妖    时间: 2015-2-25 19:03
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 金色的骷髅    时间: 2015-3-8 12:43
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 透明    时间: 2015-3-13 09:53
爱上php,他也会爱上你。
作者: 愤怒的大鸟    时间: 2015-3-15 16:02
兴趣是最好的老师,百度是最好的词典。
作者: 活着的死人    时间: 2015-3-22 02:07
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 冷月葬花魂    时间: 2015-3-22 02:07
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 爱飞    时间: 2015-3-24 02:09
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 不帅    时间: 2015-3-29 17:37
实践是检验自己会不会的真理。
作者: admin    时间: 2015-4-1 08:35
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 因胸联盟    时间: 2015-4-15 10:14
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 柔情似水    时间: 2015-4-23 03:55
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者: 精灵巫婆    时间: 2015-4-25 11:49
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 第二个灵魂    时间: 2015-5-4 08:47
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 山那边是海    时间: 2015-5-6 08:10
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 莫相离    时间: 2015-5-6 22:10
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2