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)