您的位置:首页 > 数据库 > MySQL

mysql 设置字符集为utf8

2015-12-16 10:30 495 查看
转自:http://blog.sina.com.cn/s/blog_6c963df7010189q1.html

选项说明

character_set_client

这是用户告诉MySQL查询是用的什么字符集。

character_set_connection

MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。

character_set_results

MySQL将存储的数据转换成character_set_results中设定的字符集发送给用户。

Comsenz Discuz! 并没有使用set NAMES character

SET NAMES 'x'语句与这三个语句等价:

mysql> SET character_set_client = x;

mysql> SET character_set_results = x;

mysql> SET character_set_connection = x

而 Comsenz Discuz! 里面是

@mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);

SET character_set_client = binary;

使用二进制字符集查询

此三处的字符设定很大程度上会解决乱码问题,那么着三个设定具体有什么作用呢?

character_set_client

指定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理,character_set_connection 指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给 MySQL 的 SQL 语句,会首先被 MySQL 从character_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进行转码、不同编码的数据库之间共用数据。

选项配置

配置文件路径:/full/path/mysql/bin/my.ini (或者 my.conf )

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

*注意:

在 mysqld 中使用 default-character-set 设置, mysql 启动会报错而无法启动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: