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 启动会报错而无法启动。
选项说明
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 启动会报错而无法启动。
相关文章推荐
- 未能加载文件或程序集 MySql.Web
- mysql配置文件my-innodb-heavy-4G.cnf中文版解释
- MYSQL 环境变量添加
- MYSQL千万级数据量的优化方法积累
- MySQL 数据库双向同步复制
- MySQL中DATETIME、DATE和TIMESTAMP类型的区别
- 数据库调优分享-mysql
- MySql启动服务时:错误1067进程意外终止
- mySQL内存及虚拟内存优化设置[转]
- MySql查询时间段的方法
- mysql查询今天、昨天、7天、近30天、本月数据
- MySQL的varchar类型注意事项
- MYSQL 根据逗号拆分字段
- MySQL中CREATE DATABASE和CREATE SCHEMA区别
- 浅谈SQL及MYSQL基本命令
- MAC 上 mysql 的编码设置
- MySQL中join语句的基本使用教程及其字段对性能的影响
- MySQL中union和join语句使用区别的辨析教程
- MySQL中UPDATE与DELETE语句的使用教程
- MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程