Mysql 中文亂碼問題完美解決方案

MySQL會出現中文亂碼的緣由不外乎下列幾點:
1.server自己設定問題,例如還停留在latin1
2.table的語系設定問題(包含character與collation)
3.客戶端程式(例如php)的連線語系設定問題
強烈建議使用utf8!!!!
utf8能夠兼容世界上全部字符!!!!
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;php

這3個設置好了,基本就不會出問題了,即建庫和建表時都使用相同的編碼格式。
可是若是你已經建了庫和表能夠經過如下方式進行查詢。
1.查看默認的編碼格式:
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設置默認的編碼格式;mysql

執行SET NAMES utf8的效果等同於同時設定以下:
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';sql

2.查看test數據庫的編碼格式:
mysql> show create database test;
+------------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+------------+------------------------------------------------------------------------------------------------+
| test | CREATE DATABASE test /!40100 DEFAULT CHARACTER SET gbk / |
+------------+------------------------------------------------------------------------------------------------+數據庫

3.查看yjdb數據庫的編碼格式:
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 |網站

2、避免導入數據有中文亂碼的問題
1:將數據編碼格式保存爲utf-8
設置默認編碼爲utf8:
set names utf8;
設置數據庫db_name默認爲utf8:
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
設置表tb_name默認編碼爲utf8:
ALTER TABLE tb_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
導入:
LOAD DATA LOCAL INFILE 'C:\utf8.txt' INTO TABLE yjdb;
2:將數據編碼格式保存爲ansi(即GBK或GB2312)
設置默認編碼爲gbk:
set names gbk;
設置數據庫db_name默認編碼爲gbk:
ALTER DATABASE db_name DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
設置表tb_name默認編碼爲gbk:
ALTER TABLE tb_name DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
導入:
LOAD DATA LOCAL INFILE 'C:\gbk.txt' INTO TABLE yjdb;編碼

注:1.UTF8不要導入gbk,gbk不要導入UTF8;
2.dos下不支持UTF8的顯示;
3、解決網頁中亂碼的問題code

將網站編碼設爲 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;server

相關文章
相關標籤/搜索