Mysql中文乱码及 字符集character set 和校对集(COLLATE)

MySQL会出现中文乱码的缘由不外乎下列几点:
1.server自己设定问题,例如还停留在latin1
2.table的语系设定问题(包含character与collation)
3.客户端程式(例如php)的连线语系设定问题php

强烈建议使用utf8!!!!mysql

utf8能够兼容世界上全部字符!!!!sql

1、避免建立数据库及表出现中文乱码和查看编码方法数据库

一、建立数据库的时候:CREATE DATABASE `test`
                        CHARACTER SET 'utf8'
                         COLLATE 'utf8_general_ci';
二、建表的时候          CREATE TABLE `database_user` (
                        `ID` varchar(40) NOT NULL default '',
                        `UserID` varchar(40) NOT NULL default '',
                      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;apache


这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。服务器

可是若是你已经建了库和表能够经过如下方式进行查询。编码

2、字符集(CHARACTER SET)和校对集(COLLATE)code

字符集:能够设置 服务器默认字符集、数据库默认字符集、表默认字符集、甚至到列默认字符集server

某个级别没有指定,那么继承上级。继承

mysql4.1及其以后的版本,对字符集的支持分为四个层次:

服务器(server),数据库(database),数据表(table)和链接(connection):
character_set_server:这是设置服务器使用的字符集
character_set_client :这是设置客户端发送查询使用的字符集
character_set_connection :这是设置服务器须要将收到的查询串转换成的字符集
character_set_results :这是设置服务器要将结果数据转换到的字符集,转换后才发送给客户端
整个过程:
- client(如php程序)发送一个查询;
- 服务器收到查询,将查询串从character_set_client 转换到character_set_connection,而后执行转换后的查询;
- 服务器将结果数据转换到character_set_results字符集后发送回客户端。

可使用 show variables like "%char%";

mysql> show variables like "%char%"; 
+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | latin1                                                 |
| character_set_connection | latin1                                                 |
| character_set_database   | utf8                                                   |
| character_set_filesystem | binary                                                 |
| character_set_results    | latin1                                                 |
| character_set_server     | utf8                                                   |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /home/users/abc/share/mysql/charsets/ |
+--------------------------+--------------------------------------------------------+
8 rows in set (0.00 sec)

修改字符集

mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
相关文章
相关标签/搜索