2019-09-04 阿里云的mysql-rds修改字符集為utf8mb4究珊,以確保支持emoji表情包。

對emoji表情包的支持纵苛,網(wǎng)上有很多方案了剿涮。大體分為如下兩大類:

1. 基于java對表情字符串編碼預(yù)處理。

網(wǎng)上所有基于java對表情字符串編碼預(yù)處理的方案攻人,大體又分為如下幾類:

  1. 將字符串中的表情字符串剔除
    如果我們基于編碼范圍進(jìn)行提出取试,就可能提出不干凈。因?yàn)楸砬榭赡苡?utf8mb4 范圍內(nèi)utf8 范圍外的字符和 utf8 范圍內(nèi)的字符構(gòu)成怀吻,我們剔除調(diào) utf8mb4 內(nèi) utf8 外的字符了瞬浓,那么屬于表情一部分,但屬于 utf8 范圍內(nèi)的字符很可能被留下蓬坡,從而留下殘余垃圾猿棉;同時磅叛,剔除字符串,會導(dǎo)致用戶的原始輸入被篡改萨赁,顯然并不是非常合適弊琴。

  2. 將字符串中的表情字符串替換為可識別的其他字符串
    這種方案的缺點(diǎn),在于emoji表情本身在不停的發(fā)展中≌人現(xiàn)有方案無法預(yù)知未來可能會出現(xiàn)的所有的emoji表情敲董,最終總會出現(xiàn)不支持的新增表情。我們只能不斷被動更新我們的表情庫來支持新表情慰安。
    而實(shí)際上腋寨,我們很難及時更新我們支持的表情庫。甚至我們的程序根本就不支持動態(tài)更新表情庫化焕。即便可以更新表情庫精置,我們也無法跟進(jìn)全世界的表情作者的進(jìn)展。

2. 修改數(shù)據(jù)庫存儲锣杂,使其支持utf8mb4編碼字符集

該方案不修篡改用戶的原始輸入脂倦,顯然是最理想的方案。

3. 操作步驟

3.1. 修改數(shù)據(jù)庫的字符集

阿里云的rds元莫,默認(rèn)使用utf8編碼赖阻。
自維的mysql數(shù)據(jù)庫和阿里云的rds數(shù)據(jù)庫,維護(hù)方法略有差異踱蠢。
自維的mysql數(shù)據(jù)庫火欧,我們需要自己修改數(shù)據(jù)庫的my.cnf(或類似)配置文件,然后重啟mysql數(shù)據(jù)庫茎截。
而阿里云的rds數(shù)據(jù)庫苇侵,我們無法直接修改其配置文件,只能通過阿里云的控制臺進(jìn)行修改企锌。阿里云的文檔庫中榆浓,有關(guān)于如下修改阿里云的mysql數(shù)據(jù)庫字符集的文章通過RDS控制臺修改MySql數(shù)據(jù)庫編碼方法
實(shí)際上陡鹃,就是先打開rds實(shí)例列表:

進(jìn)入rds實(shí)例列表.png

然后選擇要修改的rds實(shí)例后,點(diǎn)擊右方的“參數(shù)設(shè)置”菜單:
參數(shù)設(shè)置界面.png

接下來找到 charactor_set_server 參數(shù)抖坪,再修改為 utf8mb4萍鲸。
修改服務(wù)器編碼.png

為安全起見,還可以再執(zhí)行一條修改數(shù)據(jù)庫編碼的sql語句:

ALTER DATABASE <數(shù)據(jù)庫名> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

3.2 修改表的字符集

修改表的字符集擦俐,需要按表逐一執(zhí)行語句脊阴。如果表數(shù)量比較多的話,可以用如下代碼生成修改表編碼的sql:

select concat('ALTER TABLE ', substr(t.name, 7, length(t.name)), ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') 
from innodb_sys_tables t 
where t.name like 'your_db_name%';

需要注意的是:

substr(t.name, 7, length(t.name)):這段代碼的意思,是截取表名嘿期。
mysql的 innodb_sys_tables.names 屬性品擎,其值格式為 your_db_name/your_table_name;因此秽五,需要截掉your_db_name/部分孽查。
我用作例子的數(shù)據(jù)庫饥悴,數(shù)據(jù)庫名字加上 / 坦喘,一共是6個字符。從第7個字符開始保留西设,因此mysql的substr函數(shù)的第二個參數(shù)值為7
最后瓣铣,我們執(zhí)行上述語句生成的結(jié)果字符串,就可以修改所有表的字符集了贷揽。

3.3 重啟數(shù)據(jù)庫實(shí)例

我們可以在控制臺上棠笑,進(jìn)入rds詳情界面后,點(diǎn)擊右上方工具欄上的“重啟實(shí)例”來重啟rds:


重啟rds.png

最后禽绪,我們可以執(zhí)行下列語句來驗(yàn)證數(shù)據(jù)庫的編碼是否已經(jīng)修改過來了:

SHOW CREATE DATABASE your_db_name;
SHOW CREATE TABLE your_table_name;

3.4 修改mycat配置為使用utf8mb4編碼

找到 mycat/conf/serer.xml蓖救,在其中添加如下內(nèi)容即可:

<property name="charset">utf8mb4</property>

3.3 修改jdbc連接的字符集

假設(shè)mysql服務(wù)器hostname為 rds.yourdbsrv.cn,端口為3306印屁,數(shù)據(jù)庫名為 your_db 則不指定字符集的連接字符為:

jdbc:mysql://rds.yourdbsrv.cn:3306/your_db

指定字符集為utf8mb4的連接字符串為:

jdbc:mysql://rds.yourdbsrv.cn:3306/your_db?useUnicode=true&characterEncoding=utf8mb4
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末循捺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雄人,更是在濱河造成了極大的恐慌从橘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件础钠,死亡現(xiàn)場離奇詭異恰力,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)旗吁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門踩萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人很钓,你說我怎么就攤上這事驻民。” “怎么了履怯?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵回还,是天一觀的道長。 經(jīng)常有香客問我叹洲,道長柠硕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蝗柔,結(jié)果婚禮上闻葵,老公的妹妹穿的比我還像新娘。我一直安慰自己癣丧,他們只是感情好槽畔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胁编,像睡著了一般厢钧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嬉橙,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天早直,我揣著相機(jī)與錄音,去河邊找鬼市框。 笑死霞扬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枫振。 我是一名探鬼主播喻圃,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粪滤!你這毒婦竟也來了斧拍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤额衙,失蹤者是張志新(化名)和其女友劉穎饮焦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窍侧,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡县踢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伟件。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼啤。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斧账,靈堂內(nèi)的尸體忽然破棺而出谴返,到底是詐尸還是另有隱情,我是刑警寧澤咧织,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布嗓袱,位于F島的核電站,受9級特大地震影響习绢,放射性物質(zhì)發(fā)生泄漏渠抹。R本人自食惡果不足惜蝙昙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梧却。 院中可真熱鬧奇颠,春花似錦、人聲如沸放航。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽广鳍。三九已至荆几,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搜锰,已是汗流浹背伴郁。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工耿战, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛋叼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓剂陡,卻偏偏與公主長得像狈涮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸭栖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容