原文:http://www.2cto.com/database/201108/101151.html
MySQL會出現中文亂碼的原因不外乎下列幾點:1.server本身設定問題,例如還停留在latin12.table的語系設定問題(包含character與collation)3.客戶端程式(例如php)的連線語系設定問題強烈建議使用utf8!!!!utf8可以兼容世界上所有字符!!!!一、避免創建數據庫及表出現中文亂碼和查看編碼方法1、創建數據庫的時候:
[sql] view plain copy
CREATE DATABASE test
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
2、建表的時候 [sql] view plain copy
CREATE TABLE database_user
(
ID
varchar(40) NOT NULL default '',
UserID
varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
這3個設置好了,基本就不會出問題了,即建庫和建表時都使用相同的編碼格式。但是如果你已經建了庫和表可以通過以下方式進行查詢。1.查看默認的編碼格式:
[sql] view plain copy
mysql> show variables like "%char%";
+--------------------------+---------------+
| Variable_name | Value |
+--------------------------+---------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------------+
注:以前2個來確定,可以使用set names utf8,set names gbk設置默認的編碼格式;
執行SET NAMES utf8的效果等同于同時設定如下:
[sql] view plain copy
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
2.查看test數據庫的編碼格式:
[sql] view plain copy
mysql> show create database test;
+------------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+------------+------------------------------------------------------------------------------------------------+
| test | CREATE DATABASE test
/*!40100 DEFAULT CHARACTER SET gbk */ |
+------------+------------------------------------------------------------------------------------------------+
3.查看yjdb數據表的編碼格式:
[sql] view plain copy
mysql> show create table yjdb;
| yjdb | CREATE TABLE yjdb
(
sn
int(5) NOT NULL AUTO_INCREMENT,
type
varchar(10) NOT NULL,
brc
varchar(6) NOT NULL,
teller
int(6) NOT NULL,
telname
varchar(10) NOT NULL,
date
int(10) NOT NULL,
count
int(6) NOT NULL,
back
int(10) NOT NULL,
PRIMARY KEY (sn
),
UNIQUE KEY sn
(sn
),
UNIQUE KEY sn_2
(sn
)
) ENGINE=MyISAM AUTO_INCREMENT=1826 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC |
二、避免導入數據有中文亂碼的問題1:將數據編碼格式保存為utf-8設置默認編碼為utf8:set names utf8;設置數據庫db_name默認為utf8:
[sql] view plain copy
ALTER DATABASE db_name
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
設置表tb_name默認編碼為utf8:[sql] view plain copy
ALTER TABLE tb_name
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
導入:[sql] view plain copy
LOAD DATA LOCAL INFILE 'C:\utf8.txt' INTO TABLE yjdb;
2:將數據編碼格式保存為ansi(即GBK或GB2312)設置默認編碼為gbk:set names gbk;設置數據庫db_name默認編碼為gbk:[sql] view plain copy
ALTER DATABASE db_name
DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
設置表tb_name默認編碼為gbk:
[sql] view plain copy
ALTER TABLE tb_name
DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
導入:[sql] view plain copy
LOAD DATA LOCAL INFILE 'C:\gbk.txt' INTO TABLE yjdb;
注:1.UTF8不要導入gbk,gbk不要導入UTF8;2.dos下不支持UTF8的顯示;三、解決網頁中亂碼的問題 將網站編碼設為 utf-8,這樣可以兼容世界上所有字符。 如果網站已經運作了好久,已有很多舊數據,不能再更改簡體中文的設定,那么建議將頁面的編碼設為 GBK, GBK與GB2312的區別就在于:GBK能比GB2312顯示更多的字符,要顯示簡體碼的繁體字,就只能用GBK。1.編輯/etc/my.cnf ,在[mysql]段加入default_character_set=utf8;2.在編寫Connection URL時,加上?useUnicode=true&characterEncoding=utf-8參;3.在網頁代碼中加上一個"set names utf8"或者"set names gbk"的指令,告訴MySQL連線內容都要使用utf8或者gbk;