Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

MySQL的编码机制

[复制链接]
xiaobozi 发表于 2008-8-19 17:34:04 | 显示全部楼层 |阅读模式
大家都知道从MySQL4.1版本开始,支持多种编码,包括我们熟知的 latin1、gbk、utf8、big5等等,还有一些我们闻所未闻的,

在使用PHP连接MySQL查询出来的数据有的时候居然会是乱码,关于乱码的解决首先我们要了解MySQL的编码机制

DZ论坛在连接MySQL后会立即执行一个设定
  1. @mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
  2. (见include/db_mysql.class.php)
复制代码
此三处的字符设定很大程度上会解决乱码问题,那么着三个设定具体有什么作用呢?因为有很多用户安装插件过程中会把数据库中字段的编码搞乱,所以我就开始考虑MySQL在处理编码上的机制,索性经过探讨和试验及一些文档的帮助,我现在有了初步的结论可以和大家分享



      character_set_client指定的是Sql语句的编码,如果设置为 binarymysql就当二进制来处理,character_set_connection指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给MySQL SQL语句,会首先被MySQLcharacter_set_client指定的编码转换到character_set_connection指定的编码,如果character_set_clien指定的是binary,则MySQL就会把SQL语句按照character_set_connection指定的编码解释执行.

     当执行
SQL语句的过程中,比如向数据库中插入字段的时候,字段也有编码设置,如果字段的编码设置和character_set_connection指定的不同,则MySQL 会把插入的数据转换成字段设定的编码。SQL语句中的条件判断和SQL插入语句的执行过程类似.

      SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为character_set_results指定的编码,如果character_set_results=NULL 则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置),

工作中比较有用的就是利用MySQL进行转码、不同编码的数据库之间共用数据。



补充:
1)mysql_query("character_set_client=gbk");这句 告诉mysql 我接下来要用的SQL语句的编码是GBK的

2)mysql_query("character_set_connection=gbk");这句 告诉mysql要把SQL语句转换成GBK进行处理

3)mysql_query("character_set_results=gbk");这句告诉MYSQL 查询返回的结果要统一都转换成GBK编码的

[ 本帖最后由 xiaobozi 于 2008-8-19 17:43 编辑 ]
 楼主| xiaobozi 发表于 2008-8-19 17:34:21 | 显示全部楼层
占位编辑
回复

使用道具 举报

hyjoin 发表于 2008-8-22 08:59:03 | 显示全部楼层
我的DZ在升级MYSQL时转成了latin1,但是新安装的UC却只能安装成GBK,结果中文名的ID全部无法登录,如何解决?

解决了,参考https://discuz.dismall.com/viewth ... &extra=page%3D1

[ 本帖最后由 hyjoin 于 2008-8-22 11:38 编辑 ]
回复

使用道具 举报

跑马观花灯 发表于 2008-8-23 15:18:10 | 显示全部楼层
好多文字看不懂什么意思尼.
回复

使用道具 举报

club123456 发表于 2008-8-24 21:53:34 | 显示全部楼层
谢谢楼主分享
收藏先.
回复

使用道具 举报

梨涡浅笑 发表于 2008-10-1 20:59:24 | 显示全部楼层
路过看看~~~~~~~~~~~~~···
回复

使用道具 举报

iqye 发表于 2008-10-8 18:21:07 | 显示全部楼层
不错。
回复

使用道具 举报

秦侠 发表于 2008-10-18 20:09:04 | 显示全部楼层
虽然不是很明白,但还是支持一下,呵呵
回复

使用道具 举报

学者也 发表于 2008-10-23 23:02:31 | 显示全部楼层
虽然还看不太懂,但这个不顶觉得对不起
回复

使用道具 举报

lulut 发表于 2008-10-24 14:03:00 | 显示全部楼层
来支持下,不是很会MYSQL
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-24 09:06 , Processed in 0.034338 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表