mysql學習之-字元集選定,修改。

來源:互聯網
上載者:User

標籤:參數   變數   rac   client   儲存   file   沒有   sha   編譯mysql   

基礎概念:


字元(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;  --指定字元集建立資料庫
Query OK, 1 row affected (0.00 sec)
mysql> show create database demo;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| demo     | CREATE DATABASE `demo` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> create database demo2 default character set utf8 collate utf8_general_ci; --指定字元集建立資料庫
Query OK, 1 row affected (0.00 sec)


修改字元集 :(修改資料庫字元集後,若需要使用舊資料,則還需進一步處理)
 
方法一:
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] [mysqld] [mysql])
#vi  /etc/my.cnf


方法二: (臨時生效)
通過MySQL命令列修改:


mysql> set character_set_client=utf8;


Query OK, 0 rows affected (0.00 sec)


mysql> set character_set_connection=utf8;


Query OK, 0 rows affected (0.00 sec)


mysql> set character_set_database=utf8;


Query OK, 0 rows affected (0.00 sec)


mysql> set character_set_results=utf8;


Query OK, 0 rows affected (0.00 sec)


mysql> set character_set_server=utf8;


Query OK, 0 rows affected (0.00 sec)


mysql> set character_set_system=utf8;


Query OK, 0 rows affected (0.01 sec)


mysql> set collation_connection=utf8;


Query OK, 0 rows affected (0.01 sec)


mysql> set collation_database=utf8;


Query OK, 0 rows affected (0.01 sec)


mysql> set collation_server=utf8;


Query OK, 0 rows affected (0.01 sec)




總結:
1. 如果安裝mysql時未指定資料庫字元集,則預設資料庫字元集為 latin1 。 
2. 選定資料庫字元集時需要根據開發程式選定字元集。

mysql學習之-字元集選定,修改。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.