服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

dirtysea 发表于 2012-6-21 12:38:34

Mysql中文乱码问题完美解决方案

<DD id=Article>
<P>MySQL会出现中文乱码的原因不外乎下列几点:<BR>1.server本身设定问题,例如还停留在latin1<BR>2.table的语系设定问题(包含character与collation)<BR>3.客户端程式(例如<A class=keylink href="http://www.2cto.com/kf/web/php/" target=_blank>php</A>)的连线语系设定问题<BR>强烈建议使用utf8!!!!<BR>utf8可以兼容世界上所有字符!!!!<BR>一、避免创建数据库及表出现中文乱码和查看编码方法<BR>1、创建数据库的时候:CREATE DATABASE `test`<BR>CHARACTER SET 'utf8'<BR>COLLATE 'utf8_general_ci';<BR>2、建表的时候 CREATE TABLE `database_user` (<BR>`ID` varchar(40) NOT NULL default '',<BR>`UserID` varchar(40) NOT NULL default '',<BR>) ENGINE=InnoDB DEFAULT CHARSET=utf8;</P>
<P>这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。<BR>但是如果你已经建了库和表可以通过以下方式进行查询。<BR>1.查看默认的编码格式:<BR>mysql&gt; show variables like "%char%";<BR>+--------------------------+---------------+<BR>| Variable_name | Value |<BR>+--------------------------+---------------+<BR>| character_set_client | gbk |<BR>| character_set_connection | gbk |<BR>| character_set_database | utf8 |<BR>| character_set_filesystem | binary |<BR>| character_set_results | gbk |<BR>| character_set_server | utf8 |<BR>| character_set_system | utf8 |<BR>+--------------------------+-------------+<BR>注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;</P>
<P>执行SET NAMES utf8的效果等同于同时设定如下:<BR>SET character_set_client='utf8';<BR>SET character_set_connection='utf8';<BR>SET character_set_results='utf8';</P>
<P>2.查看test数据库的编码格式:<BR>mysql&gt; show create database test;<BR>+------------+------------------------------------------------------------------------------------------------+<BR>| Database | Create Database |<BR>+------------+------------------------------------------------------------------------------------------------+<BR>| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gbk */ |<BR>+------------+------------------------------------------------------------------------------------------------+</P>
<P>3.查看yjdb数据库的编码格式:<BR>mysql&gt; show create table yjdb;<BR>| yjdb | CREATE TABLE `yjdb` (<BR>`sn` int(5) NOT NULL AUTO_INCREMENT,<BR>`type` varchar(10) NOT NULL,<BR>`brc` varchar(6) NOT NULL,<BR>`teller` int(6) NOT NULL,<BR>`telname` varchar(10) NOT NULL,<BR>`date` int(10) NOT NULL,<BR>`count` int(6) NOT NULL,<BR>`back` int(10) NOT NULL,<BR>PRIMARY KEY (`sn`),<BR>UNIQUE KEY `sn` (`sn`),<BR>UNIQUE KEY `sn_2` (`sn`)<BR>) ENGINE=MyISAM AUTO_INCREMENT=1826 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC |</P>
<P>二、避免导入数据有中文乱码的问题<BR>1:将数据编码格式保存为utf-8<BR>设置默认编码为utf8:<BR>set names utf8;<BR>设置数据库db_name默认为utf8:<BR>ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;<BR>设置表tb_name默认编码为utf8:<BR>ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;<BR>导入:<BR>LOAD DATA LOCAL INFILE 'C:\\utf8.txt' INTO TABLE yjdb;<BR>2:将数据编码格式保存为ansi(即GBK或GB2312)<BR>设置默认编码为gbk:<BR>set names gbk;<BR>设置数据库db_name默认编码为gbk:<BR>ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;<BR>设置表tb_name默认编码为gbk:<BR>ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;<BR>导入:<BR>LOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE yjdb;</P>
<P>注:1.UTF8不要导入gbk,gbk不要导入UTF8;<BR>2.<A class=keylink href="http://www.2cto.com/os/dos/" target=_blank>dos</A>下不支持UTF8的显示;<BR>三、解决网页中乱码的问题<BR>&nbsp;<BR>将网站编码设为 utf-8,这样可以兼容世界上所有字符。<BR>  如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK。<BR>1.编辑/etc/my.cnf ,在[<A class=keylink href="http://www.2cto.com/database/mysql/" target=_blank>mysql</A>]段加入default_character_set=utf8;<BR>2.在编写Connection URL时,加上?useUnicode=true&amp;characterEncoding=utf-8参;<BR>3.在网页代码中加上一个"set names utf8"或者"set names gbk"的指令,告诉MySQL连线内容都要使用<BR>utf8或者gbk;</P></DD>
页: [1]
查看完整版本: Mysql中文乱码问题完美解决方案