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)