標籤:
一:mysql字元集mysql的字元集支援(Character Set Support)有兩個類型:字元集(Character set)和串連校對(Collation)。對於字元集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和串連(connection)。mysql對於字元集的指定可以細化到一個資料庫,一張表,一列。一般的程式在建立資料庫和資料表時並沒有使用那麼複雜的配置,它們用的是預設的配置(1)編譯mysql時,預設的字元集是 latin1;
(2)安裝mysql時,可以在設定檔 (my.ini) 中指定一個預設的的字元集,如果沒指定這個值採用預設的;
(3)啟動mysql時,可以在命令列參數中指定預設的的字元集,如果沒指定則繼承自設定檔中的配置,此時 character_set_server 被設定為這個預設的字元集;
(4)當建立一個新的資料庫時,除非明確指定,這個資料庫的字元集被預設設定為character_set_server;
(5)當選定了一個資料庫時,character_set_database 被設定為這個資料庫預設的字元集;
(6)在這個資料庫裡建立一張表時,表預設的字元集被設定為 character_set_database,也就是這個資料庫預設的字元集;
(7)當在表內設定一欄時,除非明確指定,否則此欄預設的字元集就是表預設的字元集;
如果什麼地方都不修改,那麼所有的資料庫的所有表的所有欄位的都用 latin1 儲存。所以mysql的預設編碼是Latin1,不支援中文,要支援中文需要把資料庫的預設編碼修改為gbk或者utf8。
二:mysql亂碼原因:
由以上可知:1.server本身設定,例如編碼還在使用latin12.資料表和欄位的編碼設定問題(包含character與collation)3.用戶端程式(例如php)的連線語系設定問題 注意:GBK與GB2312的區別就在於:GBK能比GB2312顯示更多的字元,要顯示簡體碼的繁體字,就只能用GBK。
三:編碼查詢 查看資料庫的編碼方式命令為:
1 mysql>show variables like ‘character%‘; 2 +--------------------------+----------------------------+ 3 | Variable_name | Value | 4 +--------------------------+----------------------------+ 5 | character_set_client | latin1 | 6 | character_set_connection | latin1 | 7 | character_set_database | latin1 | 8 | character_set_filesystem | binary | 9 | character_set_results | latin1 |10 | character_set_server | latin1 |11 | character_set_system | utf8 |12 | character_sets_dir | /usr/share/mysql/charsets/ |13 +--------------------------+----------------------------+、15 mysql> show variables like ‘collation%‘;(或者使用 >show variables like ‘collation%‘;)16 +----------------------+-------------------+17 | Variable_name | Value |18 +----------------------+-----------------------+19 | collation_connection | latin1_swedish_ci |20 | collation_database | latin1_swedish_ci |21 | collation_server | latin1_swedish_ci |22 +----------------------+-----------------------+
四:編碼方式的修改 其中: character_set_client 為用戶端編碼方式; character_set_connection 為建立串連使用的編碼;
character_set_database 資料庫的編碼;
character_set_results 結果集的編碼;
character_set_server 資料庫伺服器的編碼; 外部存取資料亂碼的問題就出在這個connection串連層上,解決方案是在發送查詢前執行一下下面這句:
SET names utf8 相當於: SET character_set_client =‘utf8‘;
SET character_set_connection =‘utf8‘; SET character_set_results =‘utf8‘; 修改後可以解決大部分的編碼問題。
還有一種最簡單的修改方法,就是修改mysql的my.ini(linux系統為my.cnf)檔案中的字元集索引值,
在[client]下面加上
default-character-set = utf8
在[mysqld]下面加上
character_set_server = utf8
default-character-set = utf8
character-set-server = utf8
collation-server = latin1_swedish_ci
init_connect = ‘SET collation_connection = utf8_general_ci‘
init_connect = ‘SET NAMES utf8‘
修改完後,重啟mysql的服務,service mysql restart
五:避免建立資料庫及表出現中文亂碼和查看編碼方法
1、建立資料庫的時候:
1 CREATE DATABASE `datatest`2 CHARACTER SET ‘utf8‘3 COLLATE ‘utf8_general_ci‘;
2、建表的時候
1 CREATE TABLE `database_user` (2 `id` varchar(40) NOT NULL default ‘‘,3 `name` varchar(40) NOT NULL default ‘‘,4 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果是已經建立的資料庫可以使用以下修改 1.修改資料庫的編碼 將資料庫(test)的編碼方式修改為utf8,如:
1 ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
2.修改表的編碼 將表(test)的編碼方式修改為utf8,如:
1 ALTER TABLE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
3.修改欄位的編碼 將表(test)中欄位(name)的編碼方式修改為utf8,如:
1 ALTER TABLE `test` CHANGE `name` `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
mysql編碼設定