MySQL中文乱码phpmyadmin乱码php乱码 产生原因及其解决方法 - 武林网_第1页
MySQL中文乱码phpmyadmin乱码php乱码 产生原因及其解决方法 - 武林网_第2页
MySQL中文乱码phpmyadmin乱码php乱码 产生原因及其解决方法 - 武林网_第3页
MySQL中文乱码phpmyadmin乱码php乱码 产生原因及其解决方法 - 武林网_第4页
MySQL中文乱码phpmyadmin乱码php乱码 产生原因及其解决方法 - 武林网_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MySQL中文乱码,phpmyadmin乱码,php乱码产生原因及其解决方法-武林网近日发现很多人为MySQL中文乱码问题所困扰。于是就这个问题做一下浅析。不正确的地方希望大家指正/*来源PHPfans网址:*/乱码产生原因mysql字符编码是版本4.1引入的,支持多国语言,而且一些特性已经超过了其他的数据库系统。我们能够在MySQLCommandLineClient下输入如下命令查看mysql的字符集mysqlSHOWCHARACTERSET;+----------+-----------------------------+---------------------+--------+|Charset|Description|Defaultcollation|Maxlen|+----------+-----------------------------+---------------------+--------+|big5|Big5TraditionalChinese|big5_chinese_ci|2||dec8|DECWestEuropean|dec8_swedish_ci|1||cp850|DOSWestEuropean|cp850_general_ci|1||hp8|HPWestEuropean|hp8_english_ci|1||koi8r|KOI8-RRelcomRussian|koi8r_general_ci|1||latin1|cp1252WestEuropean|latin1_swedish_ci|1||latin2|ISO8859-2CentralEuropean|latin2_general_ci|1||swe7|7bitSwedish|swe7_swedish_ci|1||ascii|USASCII|ascii_general_ci|1||ujis|EUC-JPJapanese|ujis_japanese_ci|3||sjis|Shift-JISJapanese|sjis_japanese_ci|2||hebrew|ISO8859-8Hebrew|hebrew_general_ci|1||tis620|TIS620Thai|tis620_thai_ci|1||euckr|EUC-KRKorean|euckr_korean_ci|2||koi8u|KOI8-UUkrainian|koi8u_general_ci|1||gb2312|GB2312SimplifiedChinese|gb2312_chinese_ci|2||greek|ISO8859-7Greek|greek_general_ci|1||cp1250|WindowsCentralEuropean|cp1250_general_ci|1||gbk|GBKSimplifiedChinese|gbk_chinese_ci|2||latin5|ISO8859-9Turkish|latin5_turkish_ci|1||armscii8|ARMSCII-8Armenian|armscii8_general_ci|1||utf8|UTF-8Unicode|utf8_general_ci|3||ucs2|UCS-2Unicode|ucs2_general_ci|2||cp866|DOSRussian|cp866_general_ci|1||keybcs2|DOSKamenickyCzech-Slovak|keybcs2_general_ci|1||macce|MacCentralEuropean|macce_general_ci|1||macroman|MacWestEuropean|macroman_general_ci|1||cp852|DOSCentralEuropean|cp852_general_ci|1||latin7|ISO8859-13Baltic|latin7_general_ci|1||cp1251|WindowsCyrillic|cp1251_general_ci|1||cp1256|WindowsArabic|cp1256_general_ci|1||cp1257|WindowsBaltic|cp1257_general_ci|1||binary|Binarypseudocharset|binary|1||geostd8|GEOSTD8Georgian|geostd8_general_ci|1||cp932|SJISforWindowsJapanese|cp932_japanese_ci|2||eucjpms|UJISforWindowsJapanese|eucjpms_japanese_ci|3|+----------+-----------------------------+---------------------+--------+36rowsinset(0.02sec)更多mysql的字符集知识能够参考论坛的或者mysql官方的MySQL4.1的字符集支持(CharacterSetSupport)有两个方面:字符集(Characterset)和排序方式(Collation)。对于字符集的支持细化到四个层次:服务器(server),数据库(database),数据表(table)和连接(connection)。查看系统的字符集和排序方式的设定能够通过下面的两条命令:mysqlSHOWVARIABLESLIKE'character_set_%';+--------------------------+-------------------------------------------+|Variable_name|Value|+--------------------------+-------------------------------------------+|character_set_client|latin1||character_set_connection|latin1||character_set_database|latin1||character_set_filesystem|binary||character_set_results|latin1||character_set_server|latin1||character_set_system|utf8||character_sets_dir|D:MySQLMySQLServer5.0sharecharsets|+--------------------------+-------------------------------------------+8rowsinset(0.06sec)mysqlSHOWVARIABLESLIKE'collation_%';+----------------------+-------------------+|Variable_name|Value|+----------------------+-------------------+|collation_connection|latin1_swedish_ci||collation_database|latin1_swedish_ci||collation_server|latin1_swedish_ci|+----------------------+-------------------+3rowsinset(0.02sec)上面列出的值就是系统的默认值。latin1默认校对规则是latin1_swedish_ci,默认是latin1的瑞典语排序方式.为什么呢默认会是latin1_swedish_ci呢,追溯一下mysql历史很容易发现1979年,一家瑞典公司Tcx欲开发一个快速的多线程、多用户数据库系统。Tcx公司起初想利用mSQL和他们自个的快速低级例程(IndexedSequentialAccessMethod,ISAM)去连接数据库表,然而,在一些测试以后得出结论:mSQL对其需求来讲不够快速和灵敏。这就产生了一个连接器数据库的新SQL接口,它使用几乎和mSQL一样的API接口。这个API被设计成能够使那些由mSQL而写的第三方代码更容易地移植到MySQL。相信假如mysql是中国开发的,那么汉语也是默认编码了当然我们可以以自个需要修改mysql的默认字符集在mysql配置文档my.ini,找到如下两句:[mysql]default-character-set=latin1和#createdandnocharactersetisdefineddefault-character-set=latin1修改后面的值就能够。这里不建议改,仍保存默认值也就是讲启动mysql时,假如没指定指定一个默认的的字符集,这个值继承自配置文件中的;此时character_set_server被设定为这个默认的字符集;当开创建立一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;中选定了一个数据库时,character_set_database被设定为这个数据库默认的字符集;在这个数据库里开创建立一张表时,表默认的字符集被设定为character_set_database,也就是这个数据库默认的字符集;当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集。这样问题就随之而来了,假设一数据库是gbk编码。假如访问数据库时没指定其的字符集是gbk。那么这个值将继承系统的latin1,这样就做成mysql中文乱码。乱码解决方式方法要解决乱码问题,首先必须弄清楚自个数据库用什么编码。假如没有指明,将是默认的latin1。我们用得最多的应该是这3种字符集gb2312,gbk,utf8。那么我们怎样去指定数据库的字符集呢?下面也gbk为例【在MySQLCommandLineClient开创建立数据库】mysqlCREATETABLE`mysqlcode`(-`id`TINYINT(255)UNSIGNEDNOTNULLAUTO_INCREMENTPRIMARYKEY,-`content`VARCHAR(255)NOTNULL-)TYPE=MYISAMCHARACTERSETgbkCOLLATEgbk_chinese_ci;QueryOK,0rowsaffected,1warning(0.03sec)mysqldescmysqlcode;+---------+-----------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+---------+-----------------------+------+-----+---------+----------------+|id|tinyint(255)unsigned|NO|PRI||auto_increment||content|varchar(255)|NO||||+---------+-----------------------+------+-----+---------+----------------+2rowsinset(0.02sec)华而不实后面的TYPE=MYISAMCHARACTERSETgbkCOLLATEgbk_chinese_ci;就是指定数据库的字符集,COLLATE(校勘),让mysql同时支持多种编码的数据库。当然我们可以以通过如下指令修改数据库的字符集alterdatabaseda_namedefaultcharacterset'charset'.客户端以gbk格式发送,能够采用下述配置:SETcharacter_set_client='gbk'SETcharacter_set_connection='gbk'SETcharacter_set_results='gbk'这个配置就等价于SETNAMES'gbk'。更多数据库知识请参考如今对刚刚开创建立的数据库操作mysqlusetest;Databasechangedmysqlinsertintomysqlcodevalues(null,'php喜好者');ERROR1406(22001):Datatoolongforcolumn'content'atrow1没有指定字符集为gbk,插入时出错mysqlsetnames'gbk';QueryOK,0rowsaffected(0.02sec)指定字符集为gbkmysqlinsertintomysqlcodevalues(null,'php喜好者');QueryOK,1rowaffected(0.00sec)插入成功mysqlselect*frommysqlcode;+----+-----------+|id|content|+----+-----------+|1|php喜好着|+----+-----------+1rowinset(0.00sec)在没有指定字符集gbk时读取也会出现乱码,如下mysqlselect*frommysqlcode;+----+---------+|id|content|+----+---------+|1|php???|+----+---------+1rowinset(0.00sec)【在phpmyadmin开创建立数据库,并指定字符集】表类型根据自个需要选,这里选MyISAM(支持全文检索);整理选择gbk_chinese_ci也就是gbk字符集gbk_bin简体中文,二进制。gbk_chinese_ci简体中文,不区分大小写。在刚刚开创建立的数据库插入数据库再阅读时发现是乱码为什么呢?是由于数据库为gbk字符集,而我们操作时没有指定为gbk回到数据库首页能够看到mysql连接校对默认的latin1_bin。我们将其改为gbk_chinese_ci再插入一条数据。看,这条已经正常了更多phpmyadmin乱码问题请参考本论坛的【解决php读取数据库乱码】仍以数据库mysqlcode为例CODE:?php$conn=mysql_connect(localhost,root,);mysql_query(setnames'gbk');//这就是指定数据库字符集,一般放在连接数据库后面就系了mysql_select_db(test);$sql=select*fr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论