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

原文: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;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容