天天看點

mysql學習之-字元集標明,修改。

環境:5.6

基礎概念:

字元(Character)是指人類語言中最小的表義符号。例如’A'、’B'等;

編碼(Encoding)是指給定一系列字元,對每個字元賦予一個數值,用數值來代表對應的字元.例如,我們給字元’A'賦予數值0,給字元’B'賦予數值1,則0就是字元’A'的編碼;

字元集(Character Set)是指字元和編碼對組成的集合。

字元序(Collation)是指在同一字元集内字元之間的比較規則。

MySQL中的字元序名稱遵從命名慣例:以字元序對應的字元集名稱開頭;以_ci(表示大小寫不敏感)、_cs(表示大小寫敏感)或_bin(表示按編碼值比較)結尾。例如:在字元序“utf8_general_ci”下,字元“a”和“A”是等價的;

mysql> show variables like 'character%'; --檢視MySQL字元集設定 MySQL字元集設定

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

| Variable_name | Value | ? 系統變量:

| character_set_client | utf8 | – character_set_client:用戶端來源資料使用的字元集 

| character_set_connection | utf8 | – character_set_connection:連接配接層字元集

| character_set_database | latin1 | – character_set_database:目前選中資料庫的預設字元集

| character_set_filesystem | binary | – character_set_filesystem:檔案系統字元集

| character_set_results | utf8 | – character_set_results:查詢結果字元集

| character_set_server | latin1 | – character_set_server:内部操作字元集(伺服器的字元集)

| character_set_system | utf8 | – character_set_system:系統中繼資料(字段名等)字元集

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

8 rows in set (0.00 sec)

詳細解釋:

1. 

伺服器(資料)端的字元集和collation,可以分成四級逐層指定——server, database, table, column。當MySQL存取位于某一列(column)的資料時,如果column的字元集和collation沒有指定,就會向上追溯table的;如果table也沒有指定字元集和collation,就以database的字元集和collation作為預設值;如果database仍舊沒有指定,那麼就以伺服器的字元集和collation作為預設值。

2.

server的字元集和collation的預設值又是從哪裡來的呢?答案是,配置檔案(my.ini)和mysqld(或者mysqld-nt)的指令行參數中都可以指定。如果不幸的,你根本沒有在my.ini或者指令行中指定,那麼MySQL就會使用編譯MySQL時指定的預設字元集——latin1。

3.

資料字元集轉換過程:

character_set_client->character_set_connection->character_set_(column,table,database,server)->character_set_results

MySQL預設字元集

MySQL對于字元集的指定可以細化到一個資料庫,一張表,一列.傳統的程式在建立資料庫和資料表時并沒有使用那麼複雜的配置,它們用的是預設的配置.

(1)編譯MySQL 時,指定了一個預設的字元集,這個字元集是 latin1;

(2)安裝MySQL 時,可以在配置檔案 (my.ini) 中指定一個預設的的字元集,如果沒指定,這個值繼承自編譯時指定的;

(3)啟動mysqld 時,可以在指令行參數中指定一個預設的的字元集,如果沒指定,這個值繼承自配置檔案中的配置,此時 character_set_server 被設定為這個預設的字元集;

(4)安裝 MySQL選擇多語言支援,安裝程式會自動在配置檔案中把default_character_set 設定為 UTF-8,保證預設情況下所有的資料庫所有表的所有列的都用 UTF-8 存儲。

mysql> create database demo; --建立資料庫未指定字元集,使用預設字元集建立資料庫

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

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

| Database |

| information_schema |

| demo |

| mysql |

| performance_schema |

| test |

5 rows in set (0.00 sec)

mysql> show create database demo \G; --檢視建立資料庫時使用的什麼字元集。

*************************** 1. row ***************************

Database: demo

Create Database: CREATE DATABASE `demo` /*!40100 DEFAULT CHARACTER SET latin1 */

1 row in set (0.00 sec)

ERROR: 

No query specified

mysql> create database demo default character set gbk collate gbk_chinese_ci; --指定字元集建立資料庫

mysql> show create database demo;

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

| Database | Create Database |

| demo | CREATE DATABASE `demo` /*!40100 DEFAULT CHARACTER SET gbk */ |

mysql> create database demo2 default character set utf8 collate utf8_general_ci; --指定字元集建立資料庫

修改字元集 :

方法一:(永久生效)

1.查找/etc目錄下是否有my.cnf檔案;

#ls -l | grep my.cnf (在/etc下查找是否有my.cnf檔案存在)

2.如果沒有就要從/usr/share/mysql,拷貝一個到/etc 下,在/usr/share/mysql目錄下有五個字尾為.cnf的檔案,分别是 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf ;從中随便拷貝一個到/etc目錄下并将其改為my.cnf檔案,我選擇的是my-medium.cnf :

#cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

3.修改my.cnf檔案,在該檔案中的兩個地方加上 default-character-set=utf8([client] [mysql])、

在 [mysqld] 中添加character-set-server=utf8

範例(紅色為添加部分):

[mysqld]

character-set-server=utf8

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysql] (注意是小寫,部落格問題格式有問題)

default-character-set=utf8

[client]

驗證:檢視資料庫字元集

mysql> show variables like 'character%';

| Variable_name | Value |

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

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

成功!

方法二: (臨時生效)

通過MySQL指令行修改:

mysql> set character_set_client=utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_connection=utf8;

mysql> set character_set_database=utf8;

mysql> set character_set_results=utf8;

mysql> set character_set_server=utf8;

mysql> set character_set_system=utf8;

Query OK, 0 rows affected (0.01 sec)

mysql> set collation_connection=utf8;

mysql> set collation_database=utf8;

mysql> set collation_server=utf8;

總結:

1. 如果安裝mysql時未指定資料庫字元集,則預設資料庫字元集為 latin1 。 

2. 標明資料庫字元集時需要根據開發程式標明字元集。

文章可以轉載,必須以連結形式标明出處。

本文轉自 張沖andy 部落格園部落格,原文連結: http://www.cnblogs.com/andy6/p/6185273.html  ,如需轉載請自行聯系原作者