mysl数据库里乱码.doc
文本预览下载声明
mysql数据库里乱码mysql数据库里不乱码 读出来就乱了 怎么回事
一般我们读之前都先指定编码set names gb2312(根据你的编码来设置)
【答】查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql SHOW VARIABLES LIKE character_set_%;+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+7 rows in set (0.00 sec)
mysql SHOW VARIABLES LIKE collation_%; +----------------------+-------------------+| Variable_name | Value |+----------------------+-------------------+| collation_connection | latin1_swedish_ci || collation_database | latin1_swedish_ci || collation_server | latin1_swedish_ci |+----------------------+-------------------+3 rows in set (0.00 sec)
上面列出的值就是系统的默认值。(很奇怪系统怎么默认是latin1的瑞典语排序方式)...
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
SET NAMES utf8;
它相当于下面的三句指令:SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;
再试试看,正常了吧?^_^ Enjoy!
具体讲在你的查询前加一行:??????????????????????? mysql_query(SET NAMES gb2312);
?
困扰了我两天的MySQL乱码问题终于攻破,在此自我陶醉一下。哎,可惜了当时在场的3人无人能体会此项伟大突破的历史意义。?anyway 还是值得总结一下。?mysql字符集机制设定的“独特性”让我这个原先自认为精通webapp乱码问题的人也头痛了一番。?它的独特性体现在已下几个方面:存在不同级别的默认设置。MySQL4.0以后的对数据库字符集存在4+1个级别的支持。a) 系统级:由/etc/my.cf;windows下为%MySQLHOME\my.ini 系统配置文件定义b) character_set_server(服务器):这是设置服务器使用的字符集c) character_set_client(客户端) :这是设置客户端发送查询使用的字符集d) character_set_connection:这是设置服务器需要将收到的查询串转换成的字符集 e) character_set_results :这是设置服务器要将结果数据转换到的字符集,转换后才发送给客户端 ?特殊的字符集转换流程。client(如servlet)发送一个查询 - 服务器收到查询,将查询串从character_set_client 转换到character_set_connection,然后执行转换后的查询 - 服务器将结果数据转换到character_set_results字符集后发送回客户端。 ?mySQ
显示全部