真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL亂碼的具體原因和如何設(shè)置UTF8數(shù)據(jù)格式

本文主要給大家介紹MySQL亂碼的具體原因和如何設(shè)置UTF8數(shù)據(jù)格式,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對(duì)性,對(duì)大家的參考意義還是比較大的,下面跟筆者一起了解下MySQL亂碼的具體原因和如何設(shè)置UTF8數(shù)據(jù)格式吧。                                                            

創(chuàng)新互聯(lián)建站從2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元通江做網(wǎng)站,已為上家服務(wù),為通江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

MySQL使用時(shí),有一件很痛苦的事情肯定是結(jié)果亂碼。將編碼格式都設(shè)置為UTF8可以解決這個(gè)問(wèn)題,我們今天來(lái)說(shuō)下為什么要這么設(shè)置,以及怎么設(shè)置。

MySQL字符格式

字符集

在編程語(yǔ)言中,我們?yōu)榱朔乐怪形膩y碼,會(huì)使用unicode對(duì)中文字符做處理,而為了降低網(wǎng)絡(luò)帶寬和節(jié)省存儲(chǔ)空間,我們使用UTF8進(jìn)行編碼。對(duì)這兩者有什么不同不夠了解的同學(xué),可以參考Unicode字符集和UTF8編碼編碼的前世今生這篇文章。

同樣在MySQL中,我們也會(huì)有這樣的處理,我們可以查看當(dāng)前數(shù)據(jù)庫(kù)設(shè)置的編碼方式(字符集):

mysql> show variables like '%char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | latin1                           | 
| character_set_connection | latin1                           | 
| character_set_database   | latin1                           | 
| character_set_filesystem | binary                           | 
| character_set_results    | latin1                           | 
| character_set_server     | latin1                           | 
| character_set_system     | utf8                             | 
| character_sets_dir       | /usr/local/mysql/share/charsets/ | 
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

表中就是當(dāng)前設(shè)置的字符集,先看不用關(guān)注的幾個(gè)值:

character_set_filesystem | binary:文件系統(tǒng)上的存儲(chǔ)格式,默認(rèn)為binary(二進(jìn)制)

character_set_system     | utf8:系統(tǒng)的存儲(chǔ)格式,默認(rèn)為utf8

character_sets_dir       | /usr/local/mysql/share/charsets/:可以使用的字符集的文件路徑

剩下的幾個(gè)就是日常影響讀寫(xiě)亂碼的參數(shù)了:
- character_set_client:客戶端請(qǐng)求數(shù)據(jù)的字符集
- character_set_connection:從客戶端接收到數(shù)據(jù),然后傳輸?shù)淖址?br/>- character_set_database:默認(rèn)數(shù)據(jù)庫(kù)的字符集;如果沒(méi)有默認(rèn)數(shù)據(jù)庫(kù),使用character_set_server字段
- character_set_results:結(jié)果集的字符集
- character_set_server:數(shù)據(jù)庫(kù)云服務(wù)器的默認(rèn)字符集

MySQL亂碼的具體原因和如何設(shè)置UTF8數(shù)據(jù)格式

字符集的轉(zhuǎn)換流程分為3步:

1、客戶端請(qǐng)求數(shù)據(jù)庫(kù)數(shù)據(jù),發(fā)送的數(shù)據(jù)使用character_set_client字符集

2、MySQL實(shí)例收到客戶端發(fā)送的數(shù)據(jù)后,將其轉(zhuǎn)換為character_set_connection字符集

3、進(jìn)行內(nèi)部操作時(shí),將數(shù)據(jù)字符集轉(zhuǎn)換為內(nèi)部操作字符集:

(1)使用每個(gè)數(shù)據(jù)字段的character set設(shè)定值

(2)若不存在,使用對(duì)應(yīng)數(shù)據(jù)表的default character set設(shè)定值

(3)若不存在,使用對(duì)應(yīng)數(shù)據(jù)庫(kù)的default character set設(shè)定值

(4)若不存在,使用character_set_server設(shè)定值

4、將操作結(jié)果值從內(nèi)部操作字符集轉(zhuǎn)換為character_set_results

字符序

說(shuō)字符序之前,我們需要了解一點(diǎn)基礎(chǔ)知識(shí):

字符(Character)是指人類(lèi)語(yǔ)言中最小的表義符號(hào)。例如’A’、’B’等;

給定一系列字符,對(duì)每個(gè)字符賦予一個(gè)數(shù)值,用數(shù)值來(lái)代表對(duì)應(yīng)的字符,這一數(shù)值就是字符的編碼(Encoding)。例如,我們給字符’A’賦予數(shù)值0,給字符’B’賦予數(shù)值1,則0就是字符’A’的編碼;

給定一系列字符并賦予對(duì)應(yīng)的編碼后,所有這些字符和編碼對(duì)組成的集合就是字符集(Character Set)。例如,給定字符列表為{‘A’,’B’}時(shí),{‘A’=>0, ‘B’=>1}就是一個(gè)字符集;

字符序(Collation)是指在同一字符集內(nèi)字符之間的比較規(guī)則;

確定字符序后,才能在一個(gè)字符集上定義什么是等價(jià)的字符,以及字符之間的大小關(guān)系;

每個(gè)字符序唯一對(duì)應(yīng)一種字符集,但一個(gè)字符集可以對(duì)應(yīng)多種字符序,其中有一個(gè)是默認(rèn)字符序(Default Collation);

MySQL中的字符序名稱(chēng)遵從命名慣例:以字符序?qū)?yīng)的字符集名稱(chēng)開(kāi)頭;以_ci(表示大小寫(xiě)不敏感,case insensitive)、_cs(表示大小寫(xiě)敏感,case sensitive)或_bin(表示按編碼值比較,binary)結(jié)尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等價(jià)的;

因此字符序不同于字符集,用于數(shù)據(jù)庫(kù)字段的相等或大小比較。我們查看MySQL實(shí)例設(shè)置的字符序:

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)

跟utf8對(duì)應(yīng)的常用字符序是:utf8_unicode_ci/utf8_general_ci和utf8_bin等,那么他們的區(qū)別是什么呢?

1、_bin是用二進(jìn)制存儲(chǔ)并比較,區(qū)別大小寫(xiě),存儲(chǔ)二進(jìn)制內(nèi)容時(shí)使用

2、utf8_general_ci:校對(duì)速度快,但準(zhǔn)確度稍差,使用中英文時(shí)使用

3、utf8_unicode_ci:準(zhǔn)確度高,但校對(duì)速度稍慢,使用德法俄等外語(yǔ)時(shí)使用

詳細(xì)的區(qū)別可以參考 Mysql中的排序規(guī)則utf8_unicode_ci、utf8_general_ci的區(qū)別總結(jié)。

修改字符集和字符序

如果在MySQL連接時(shí),出現(xiàn)了亂碼的問(wèn)題,那么基本可以確定是各個(gè)字符集/序設(shè)置不統(tǒng)一的原因。MySQL默認(rèn)的latin1格式不支持中文,由于我們?cè)谥袊?guó),所以選擇對(duì)中文和各語(yǔ)言支持都非常完善的utf8格式。所以,我們需要將需要關(guān)注的字符集和字符序都修改為utf8格式。

你也可以選擇utf8mb4格式,這個(gè)格式支持保存emoji

看完以上關(guān)于MySQL亂碼的具體原因和如何設(shè)置UTF8數(shù)據(jù)格式,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識(shí)信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。


網(wǎng)頁(yè)題目:MySQL亂碼的具體原因和如何設(shè)置UTF8數(shù)據(jù)格式
分享URL:http://weahome.cn/article/jsospd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部