ssh遠端連線linux下的MySQL資料庫字元集和防止亂碼

來源:互聯網
上載者:User

標籤:blog   mysql   table   多執行個體   ima   order   國際   中文   業務   

實驗環境:

本地windows 8.1

遠端連線工具 SecureCRT 7.3

Linux發行版本 CentOS 6.7 x86_64位Linux系統,核心的版本為2.6.32-573

mysql版本 mysql-5.5.32

1.1 MySQL資料庫字元集介紹

字元集就是一套文字元號及編碼、比較規則的集合

MySQL資料庫字元集包括字元集(CHARACTER)和校對規則(COLLATION)兩個概念。其中,字元集是用來定義MySQL資料字串的儲存方式,而校對規則是定義比較字串的方式。

1.1.1 在互連網環境中,使用MySQL時常用的字元集有

常用字元集

一個漢字長度

說明

GBK

2位元組

不是國際標準,對中文環境支援的很好

UTF-8

3位元組

中英文混合的環境,建議使用此字元集,用的比較多

latin1

1位元組

MySQL的預設字元集

utf8mb4

4位元組

UTF-8 Unicode,用於移動互連網

1.1.2 MySQL如何選擇合適的字元集

1)        如果處理各種各樣的文字,發布到不同語言國家地區,應選擇Unicode字元集,對mysql來說就是UTF-8(每個漢字3位元組),更適合於多英文少中文

2)        如果只需要支援中文,並且資料量很大,效能要求也很高,可選GBK(定長,每個漢字占雙位元組,英文也占雙位元組),更適合於大量運算、比較排序,定長字元集,效能較高

3)        處理移動互連網業務,可能需要使用utf8mb4字元集

老師建議:沒有特別需求,請選擇UTF-8

1.1.3 查看當前MySQL系統支援的字元集

mysql> show character set;

1.2 查看系統當前使用的字元集

mysql> show variables like ‘character_set%‘;

 

想要不亂碼,就要讓上述字元集統一

1.3 更改用戶端的字元集1.3.1 進入資料庫後更改用戶端字元集

set names gbk;

將3個用戶端的字元集(1、2、5)改為gbk

相當於輸入下面3條命令:

set character_set_client = gbk;

set character_set_results = gbk;

set character_set_connection = gbk;

1.3.2 登入資料庫時更改用戶端字元集,效果同上

[[email protected] ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock --default-character=gbk;

mysql> show variables like ‘character_set%‘;

 

1.3.3 修改設定檔my.cnf

永久生效,上面

[client]

default-character-set=gbk

注意:多執行個體的情況下,此步驟修改字元集,要修改/etc/my.cnf

1.4 更改服務端字元集1.4.1 修改設定檔my.cnf

[mysqld]

default-character-set=utf8  ##適合5.1及以前版本

character-set-server=uft8  ##適合5.5

重啟服務後永久生效

這個修改影響的第3和第6個字元集,相當於修改

character_set_database

character_set_server

1.4.2 在編譯的時候指定服務端字元集

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

1.4.3 命令列修改庫的字元集

不建議在有資料的庫上修改,下面的命令對之前已經存在的資料無效,影響之後更新的資料

mysql> alter database oldboy character set latin1 collate = latin1_swedish_ci;

mysql> show create database oldboy\G

1.4.4 命令列修改表的字元集

不建議在有資料的表上修改,下面的命令對之前已經存在的資料無效,影響之後更新的資料

mysql> alter table oldboy.test character set latin1;

mysql> show create table oldboy.test\G

1.5 防止亂碼,統一其它地方1.5.1 建表建庫的時候注意統一字元集

建庫

create database oldboy_utf8 default character set utf8 collate utf8_general_ci

建表

create table `student` (

`id`  int(4)  not null  auto_increment,

`name`  char(20)  not null,

primary key (`id`),

)  ENGINE=InnoDB  AUTO_INCREMENT=10  DEFAULT  CHARSET=utf8

1.5.2 程式

程式碼的編碼要和庫表統一,UTF-8無簽名

1.5.3 linux服務端

cat /etc/sysconfig/i18n

$LANG的字元集要和資料庫統一

1.5.4 串連工具CRT的字元集

更改SecureCRT工具的預設字元集為utf-8

1.5.5 在資料庫中執行sql語句的方法

1)        操作習慣

盡量不在MySQL命令列直接插入資料(SSH用戶端影響),將SQL語句放到檔案裡

2)        sql檔案的格式

統一使用“uft8沒有簽名”

3)        匯入檔案方式

可在MySQL命令列中用source執行sql檔案

命令方式匯入資料mysql –uroot –poldboy123 oldboy <test.sql

4)        匯入sql語句時設定用戶端字元集

sql檔案裡加入set names utf8;

或者mysql –uroot –poldboy123 oldboy --default-character-set=uft8 <test.sql

1.6 更改已有資料的資料庫字元集

思想:匯出原庫的表結構和資料,刪除原庫建立新庫,將表結構和資料匯入新庫

1.6.1 匯出表結構

mysqldump –uroot –poldboy123 --default-character-set=latin1 –d dbname >alltable.sql

--default-character-set=uft8表示以utf8字元集進行串連,-d只導表結構

1.6.2 編輯表結構語句

表結構alltable.sql將所有latin1字串改成utf8(可以用sed做個替換)

1.6.3 匯出資料

確保資料庫不再更新,匯出所有資料(不帶表結構)

mysqldump –uroot –poldboy123 --quick --no-create-info --extended-insert --default-character-set =latin1 dbname >alldata.sql

參數說明:

--quick  用於轉儲大的表,強制mysqldump從伺服器一次一行的檢索資料而不是檢索所有行,並輸出前CACHE到記憶體中

--no-create-info  不建立CREATE TABLE語句

--extended-insert  使用包括幾個VALUES列表的多行INSERT文法,這樣檔案更小,IO也小,匯入資料時會非常快

--default-character-set =latin1  按照原有字元集匯出資料,這樣匯出的檔案中,所有中文都是可見的,不會儲存成亂碼

1.6.4 修改my.cnf配置

調整用戶端及服務端字元集,重啟生效

1.6.5 通過utf8建庫

刪除原庫,然後create database dbname default charset utf8;

1.6.6 匯入表結構

匯入的是更改過的字元集的表結構

mysql –uroot –poldboy123 dbname <alltable.sql

1.6.7 匯入資料

mysql –uroot –poldboy123 dbname <alldata.sql

PS:選擇目錄字元集時,要注意最好大於等於源字元集(字型檔更大),否則可能會丟失不被支援的資料

ssh遠端連線linux下的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.