Mysql乱码问题Word格式.docx
- 文档编号:15848180
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:28
- 大小:35.98KB
Mysql乱码问题Word格式.docx
《Mysql乱码问题Word格式.docx》由会员分享,可在线阅读,更多相关《Mysql乱码问题Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
createtablemy_table(namevarchar(20)notnulldefault'
'
)type=myisamdefaultcharsetutf8;
#这句话就是创建一个表了,制定默认字符集为utf8
2.写数据
例子1是通过php直接插入数据:
a.php
<
?
php
mysql_connect('
localhost'
'
user'
password'
);
mysql_select_db('
my_db'
//请注意,这步很关键,如果没有这步,所有的数据读写都会不正确的
//它的作用是设置本次数据库联接过程中,数据传输的默认字符集
mysql_query("
setnamesutf8;
"
//必须将gb2312(本地编码)转换成utf-8,也可以使用iconv()函数
mysql_query(mb_convet_encoding("
insertintomy_tablevalues('
测试'
"
utf-8"
gb2312"
));
>
例子是通过页面提交插入数据2:
b.php
//输出本页编码为utf-8
header("
content-type:
text/html;
charset=utf-8"
if(isset($_REQUEST['
name'
))
{
//由于上面已经指定本页字符集为utf-8了,因此无需转换编码
mysql_query(sprintf("
%s'
$_REQUEST['
]));
}
$q=mysql_query("
select*frommy_table"
while($r=mysql_fetch_row($q))
print_r($r);
metahttp-equiv="
Content-Type"
content="
formaction="
method="
post"
inputtype="
text"
name="
name"
value="
submit"
value='
submit'
/form>
自此,使用utf8字符集的完整的例子结束了.
如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束,例如:
createtablemy_table(namevarchar(20)binarynotnulldefault'
)type=myisamdefaultcharsetlatin1;
附:
旧数据升级办法
以原来的字符集为latin1为例,升级成为utf8的字符集。
原来的表:
old_table(defaultcharset=latin1),新表:
new_table(defaultcharset=utf8)。
第一步:
导出旧数据
mysqldump--default-character-set=latin1-hlocalhost-uroot-Bmy_db--tablesold_table>
old.sql
第二步:
转换编码
iconv-tutf-8-fgb2312-cold.sql>
new.sql
在这里,假定原来的数据默认是gb2312编码。
第三步:
导入
修改old.sql,增加一条sql语句:
"
SETNAMESutf8;
,保存。
mysql-hlocalhost-urootmy_db<
大功告成!
!
===============================
Mysql自4.1以后,增加了对字符集的支持。
笔者之前对Mysql比较了解,刚接触4.1时,感觉Mysql有点多此一举,但后来细想发现,对字符集的支持,虽然对开发者来说,会麻烦一些,但不可否认,是一种进步。
对字符集的支持,不仅更加支持多语言,而且,也方便移植。
刚开始使用Mysql4.1,你可能感觉有点不适,下面,简单阐述一下笔者对Mysql4.1字符集的理解,再讲述如何PHP如何适应Mysql的这种变化,希望大家看过这文章后,能够有所收获。
如果你对计算机基础知识不了解,请直接阅读“结论篇”
一.原理篇
Mysql的字符集里有两个概念,一个是“Characterset(字符集)”,另一个是“Collations”。
1.Collations
Collations翻成中文是“校验”,在网页开发的过程中,这个词汇,只在Mysql里使用,主要作用是指导Mysql对字符的比较,比如,ASCII字符集里,Collations规定了a小于b,a等于a,以及a是否等于A之类的。
通常,大家基本可以忽略Collations的存在,因为每个字符集都有一个默认的Collations,通常,使用默认的Collations就可以了。
2.字符集
与这对比的是,字符集是个更广的概念,即使是Windows下普通的文本文件,也渗及到字符集的问题。
不同的字符集,规定了不同的字符的编码方式。
一个characterset(字符集)是一组符号和编码,比如,ASCII字符集,包括的字符有:
数字,大小写字母,分号、换行之类的符号,编码方式是用一个7bit表示一个字符(A的编码是65,b的编码是98)。
ASCII只规定了英文字母的编码,非英文语言不能用ASCII编码表示,为此,不同的国家,都为自己的语言做了编码,比如,我们国家,就有GB2312编码。
但每个国家之间的编码不同,也存在着一些跨平台的问题,为此,一些国际化标准组织,就制定了一些国际通用的编码,最常用的就是UTF8了。
ASCII只对英文符号和英文字母做了编码,GB2312对英文符号,英文字母,汉字做了编码,UTF8对世界上所有的语言文字做了编码,所以,GB1212的字符包含了ASCII字符,UTF8包含了GB2312字符。
由此可见,UTF8是所含最广字符的字符集,所以,在一些多语言的WEB系统中,一般用UTF8字符集(PHPMyAdmin使用UTF8编码)。
任何文本的存储,都渗及到字符集的概念。
包括数据库,也包括普通的文本文件。
主要术语:
字符:
汉字,英文字母,标点符号,拉丁文等等。
编码:
将字符转换成计算机存储的格式,比如,A用65表示。
字符集:
一组字符以及对应的编码方式。
a.Mysql的字符集
Mysql目前支持多字符集,并且,支持在不同的字符集之间转换(便于移植和支持多语言)。
Mysql可以设置服务器级字符集、数据库级字符集、数据表级字符集、表列的字符集,实际上,最终使用字符集的地方是存储字符的列,比如,你设置table1中col1列是字符类型,col1才用到了字符集,如果table1表的col2列是int类型,col2不使用字符集的概念。
服务器级字符集、数据库级字符集、数据表级字符集都是为列的字符集做默认选项的。
Mysql一定有一个字符集,可以通过启动时加参数指定,也可以编译时指定,也可以在配置文件里指定。
Mysql服务器字符集,只是做为数据库级的默认值。
创建数据库时,你可以指定字符集,如果没指定,就使用服务器的字符集。
同理,创建表时,你可以指定表级的字符集,如果没指定,使用数据库的字符集做为表的字符集。
创建列时,你可以指定某列的字符集,如果没指定,就使用表的字符集。
通常情况下,您只需设置服务器级的字符集,其它的数据库级,表级,以及列级的字符集,都继承自服务器级字符集。
由于UTF8是最广的字符集,所以,一般情况下,我们设置Mysql服务器级的字符集为UTF8!
b.普通文本的字符集问题
任何文本的存储,都存在着字符集的问题,普通文本文件也不例外。
Windows2000+的系统中,打开记事本,“保存为…”对话框,就有一个选项,可以让你选择存储文本的编码方式。
通常情况下,大家都使用Windows2000+的系统,都使用默认的编码,所以,不会碰到字符集的问题。
Windows下,保存文本文件时,可以选择编码方式,但打开文本文件时,都是自动判断编码方式的。
网上有一个用Windows2000+的记事本玩移动,联通的笑话,大家可以搜搜,就是因为Windows在打开文本文件时,编码判断错误引起的问题。
因为自动判断编码有时会错误,所以,有的文本文件,规定了如何识别自身所使用的编码。
HTML文件就是一个这样的例子。
HTML是文本文件。
存储HTML文件的时候,需要使用一个编码,并且,在HTML文件里,也使用HTML语法,指定了该文件所使用的编码(比如)。
如果HTML文件没有指定编码,则浏览器自动识别文件的编码。
如果HTML指定了编码,则浏览器使用HTML指定的编码。
通常情况下,HTML文件指定的charset和HTML文件自身的编码是一致的,但也有不一致的情况,如果不一致,就会导致网页乱码(此处乱码,只和文本文件有关,和数据库无关。
)使用专门的网页编辑工具(比如Dreamwave),会自动根据网页中的charset值来编码文件。
c.php+mysql的字符集问题
PHP最终生成的是文本文件,但他要取数据库里的文本,或将文本存进数据库。
由于Mysql支持多字符集,默认情况下,Mysql不知道PHP发给他的是什么编码的字符,所以,Mysql要求客户端(PHP)告诉他存取的字符集是什么。
PHP通过设置character_set_client,告诉Mysql,PHP存进数据库的是什么编码方式。
PHP通过设置character_set_results,告诉Mysql,PHP需要取什么样编码的数据。
PHP通过设置character_set_connection,告诉Mysql,PHP查询中的文本,使用什么编码。
MYSQL使用设置的编码方式存储文本。
假设Mysql使用setserver来存储文本,PHP的character_set_client是setclient,PHP的character_set_results是setresult。
那么,Mysql将PHP发来的文本,从setclient编码方式,转换成setserver编码方式,再存入数据库,如果P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mysql 乱码 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)