1. 程式人生 > >MySQL中文亂碼詳解

MySQL中文亂碼詳解

MySQL會出現中文亂碼的原因不外乎下列幾點: 1.server本身設定問題,例如還停留在latin1 2.table的語系設定問題(包含character與collation) 3.客戶端程式(例如php)的連線語系設定問題 強烈建議使用utf8!!!! utf8可以相容世界上所有字元!!!! 一、避免建立資料庫及表出現中文亂碼和檢視編碼方法 1、建立資料庫的時候:CREATE DATABASE test CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 2、建表的時候 CREATE TABLE database_user (ID varchar(40) NOT NULL default '',UserID

 varchar(40) NOT NULL default '', ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這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設定預設的編碼格式;

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

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 |

二、避免匯入資料有中文亂碼的問題 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的顯示; 三、解決網頁中亂碼的問題

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