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)
相關文章
相關標籤/搜索