国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MySQL 字符集問題

趙春朋 / 3043人閱讀

摘要:最近公司一個(gè)舊的項(xiàng)目需要支持表情,一開始以為只要修改下數(shù)據(jù)庫的表字段就好,沒想到引發(fā)了一系列的問題。將操作結(jié)果從內(nèi)部操作字符集轉(zhuǎn)換為響應(yīng)請(qǐng)求。

最近公司一個(gè)舊的項(xiàng)目需要支持 emoji 表情,一開始以為只要修改下數(shù)據(jù)庫的表字段就好,沒想到引發(fā)了一系列的問題。這里總結(jié)下,以作備忘。

01 MySQL 字符集設(shè)置

系統(tǒng)變量:

character_set_server: 默認(rèn)的內(nèi)部操作字符集
character_set_client: 客戶端來源數(shù)據(jù)使用的字符集
character_set_connection:連接層字符集
character_set_results: 查詢結(jié)果字符集
character_set_database: 當(dāng)前選中數(shù)據(jù)庫的默認(rèn)字符集
character_set_system: 系統(tǒng)元數(shù)據(jù)(字段名等)字符集

02 MySQL 中的字符集轉(zhuǎn)換過程

MySQL Server收到請(qǐng)求時(shí)將請(qǐng)求數(shù)據(jù)從 character_set_client 轉(zhuǎn)換為character_set_connection

進(jìn)行內(nèi)部操作前將請(qǐng)求數(shù)據(jù)從 character_set_connection 轉(zhuǎn)換為內(nèi)部操作字符集,其確定方法如下:

使用表中字段的 CHARACTER SET 設(shè)定值;

若上述值不存在,則使用對(duì)應(yīng)數(shù)據(jù)表的 DEFAULT CHARACTER SET 設(shè)定值(MySQL擴(kuò)展,非SQL標(biāo)準(zhǔn));

若上述值不存在,則使用對(duì)應(yīng)數(shù)據(jù)庫的 DEFAULT CHARACTER SET 設(shè)定值;

若上述值不存在,則使用 character_set_server 設(shè)定值。

將操作結(jié)果從內(nèi)部操作字符集轉(zhuǎn)換為 character_set_results, 響應(yīng)請(qǐng)求。

03 MySQL 啟動(dòng)配置文件 my.cnf

default-character-set: 設(shè)置 mysql 命令行連接的默認(rèn)字符集
character-set-server: 設(shè)置系統(tǒng)內(nèi)部操作字符集(即上文說到的character_set_server)
collation_server: 設(shè)置系統(tǒng)默認(rèn)字符集排序

04 PHP連接 MySQL(以PDO連接方式為例)

常見的兩種設(shè)置字符集的方式

mysql:host=localhost;dbname=db_demo;charset=utf8mb4

PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"

05 總結(jié)

數(shù)據(jù)表字段的字符集需要是utf8mb4,這個(gè)是剛需

一般 character_set_clientcharacter_set_connectioncharacter_set_results 的字符集相同,且都為utf8mb4(這三個(gè)參數(shù)默認(rèn)都是utf8mb4,如果不是,是實(shí)現(xiàn)不了 emoji 表情的,原因參照字符集轉(zhuǎn)換過程)。

連接數(shù)據(jù)庫的字符集也需要是utf8mb4

character_set_servercharacter_set_database 等默認(rèn)字符集的類型并沒有那么重要,但最好還是保持一致

TP 的坑果然是多,遠(yuǎn)離TP

參考

http://www.laruence.com/2008/...

http://stackoverflow.com/ques...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22531.html

相關(guān)文章

  • mysql/Java服務(wù)端對(duì)emoji的支持

    摘要:前言最近開發(fā)的項(xiàng)目因?yàn)樾枰脩粑谋镜拇鎯?chǔ),自然就遇到了等表情符號(hào)如何被支持的問題。問題描述如果字符集且是服務(wù)器的話,當(dāng)存儲(chǔ)含有表情時(shí),會(huì)拋出類似如下異常這就是字符集不支持的異常。升級(jí)步驟的最低版本支持版本為,若不是,請(qǐng)升級(jí)到較新版本。 ? 前言: 最近開發(fā)的iOS項(xiàng)目因?yàn)樾枰脩粑谋镜拇鎯?chǔ),自然就遇到了emoji等表情符號(hào)如何被mysql DB支持的問題。困擾了數(shù)日,在就要絕望放棄...

    lncwwn 評(píng)論0 收藏0
  • Application無法傳遞Emoji字符MySQL問題

    摘要:中無法存儲(chǔ)字符,源自于之前編碼只支持最大個(gè)字節(jié),而需要個(gè)字節(jié)。事實(shí)上,如果只是某個(gè)列存在字符的存儲(chǔ)問題,那就只需要修改這個(gè)列的編碼類型即可。這涉及到應(yīng)用與建立連接的問題。有一條命令是,會(huì)將的編碼統(tǒng)一設(shè)置。使用這條命令便可以達(dá)到我們的目的。 MySQL中無法存儲(chǔ)Emoji字符,源自于MySQL 5.5之前utf8編碼只支持最大3個(gè)字節(jié),而Emoji需要4個(gè)字節(jié)。從MySQL 5.5開始,...

    dmlllll 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<