mysql編碼問題:show variables like "%char%"

原文地址:http://blog.sina.com.cn/s/blog_4a9fdb000100h8mh.htmlhtml


mysql編碼設置mysql


mysql> SHOW VARIABLES LIKE 'character_set_%';sql

+--------------------------+----------------------------+數據庫

| Variable_name | Value |ide

+--------------------------+----------------------------+編碼

| character_set_client | latin1 |spa

| character_set_connection | latin1 |命令行

| character_set_database | latin1 |rest

| character_set_results | latin1 |code

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

7 rows in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'collation_%';

+----------------------+-------------------+

| Variable_name | Value |

+----------------------+-------------------+

| collation_connection | latin1_swedish_ci |

| collation_database | latin1_swedish_ci |

| collation_server | latin1_swedish_ci |

+----------------------+-------------------+

3 rows in set (0.00 sec)

默認就是瑞典latin1,一下是換成咱們本身的編碼,如utf8:

外部訪問數據亂碼的問題就出在這個connection鏈接層上,解決方法是在發送查詢前執行一下下面這句:


1. SET NAMES 'utf8';


它至關於下面的三句指令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;


通常只有在訪問以前執行這個代碼就解決問題了,下面是建立數據庫和數據表的,設置爲咱們本身的編碼格式。

2. 建立數據庫

mysql> create database name character set utf8;


3. 建立表

CREATE TABLE `type` (

`id` int(10) unsigned NOT NULL auto_increment,

`flag_deleted` enum('Y','N') character set utf8 NOT NULL default 'N',

`flag_type` int(5) NOT NULL default '0',

`type_name` varchar(50) character set utf8 NOT NULL default '',

PRIMARY KEY (`id`)

) DEFAULT CHARSET=utf8;


4. 修改數據庫成utf8的.

mysql> alter database name character set utf8;


5. 修改表默認用utf8.

mysql> alter table type character set utf8;


6. 修改字段用utf8

mysql> alter table type modify type_name varchar(50) CHARACTER SET utf8;


===================================================================


最近開始使用MySql,之前都是用Oracle,嫌太貴了,呵呵

編碼算是MySql最難弄的問題了,研究了一下,總結點結果,部分來自其餘人的經驗,若有不妥之處,請踊躍嘰歪啊。。。


設置步驟:


1、編輯MySql的配置文件

MySql的配置文件Windows下通常在系統目錄下或者在MySql的安裝目錄下名字叫my.ini,能夠搜索,Linux下通常是 /etc/my.cnf


--在 [mysqld] 標籤下加上三行

default-character-set = utf8

character_set_server = utf8

lower_case_table_names = 1 //表名不區分大小寫(此與編碼無關)


--在 [mysql] 標籤下加上一行

default-character-set = utf8


--在 [mysql.server]標籤下加上一行

default-character-set = utf8


--在 [mysqld_safe]標籤下加上一行

default-character-set = utf8


--在 [client]標籤下加上一行

default-character-set = utf8



2、從新啓動MySql服務

Windows可在服務管理器中操做,也可以使用命令行:

net stop mysql 回車

net start mysql 回車

服務名可能不必定爲mysql,請按本身的設置


Linux下面但是用 service mysql restart


若是出現啓動失敗,請檢查配置文件有沒有設置錯誤






3、查看設置結果

登陸MySql命令行客戶端:打開命令行

mysql –uroot –p 回車

輸入密碼

進入mysql後 執行 :show variables like "%char%";

顯示結果應該相似以下:


| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |


若是仍有編碼不是utf8的,請檢查配置文件,也可以使用mysql命令設置:

set character_set_client = utf8;

set character_set_server = utf8;

set character_set_connection = utf8;

set character_set_database = utf8;

set character_set_results = utf8;

set collation_connection = utf8_general_ci;

set collation_database = utf8_general_ci;

set collation_server = utf8_general_ci;

以上命令有部分只對當前登陸有效,因此不是很管用。


4、建庫導入數據

導入sql腳本文件前,先確保該腳本文件及內容格式爲UTF-8編碼格式,

同以上方法登入mysql命令行,use 庫名 進入相應數據庫

set names utf8;

source sql腳本文件名;


5、程序鏈接字符串(此項與mysql設置無關,爲程序開發使用)

對於較老的jdbc版本的驅動,鏈接字符創可以使用一下類似格式:

jdbc:mysql://127.0.1:3306/test?useUnicode=true&characterEncoding=utf-8






6、附錄

若是沒法更改數據庫配置文件,能夠採起一下方法(不保證所有有效):

一、建數據庫時設置數據庫編碼爲utf-8

例如 create database `test` default character set utf8;



二、導入數據庫sql的時候,請確保sql文件爲utf-8編碼

進入mysql命令行後輸入 set names utf8;

再進入數據庫 use test;

在導入sql腳本 source test.sql;



三、鏈接字符串相似以下:(開發相關,非數據庫設置)

jdbc:mysql://127.0.1:3306/test?useUnicode=true&characterEncoding=utf-8

相關文章
相關標籤/搜索