国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

MySQL 存儲(chǔ)表情字符

2019-11-11 07:00:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

摘要

MySQL 中直接存儲(chǔ)表情的時(shí)候,會(huì)出現(xiàn)無(wú)法插入數(shù)據(jù)的錯(cuò)誤。

這是由于一般情況下,MySQL 的字符集是 utf8,而對(duì)于 emoji 表情的 mysql 的 utf8 字符集是不支持,需要修改設(shè)置為 utf8mb4 才行。

mysql utf8mb4與emoji表情 MYSQL 5.5 之前, UTF8 編碼只支持1-3個(gè)字節(jié),只支持BMP這部分的unicode編碼區(qū)(BMP是從哪到哪),基本就是0000~FFFF這一區(qū)。 從MYSQL5.5開始,可支持4個(gè)字節(jié)UTF編碼utf8mb4,一個(gè)字符最多能有4字節(jié),所以能支持更多的字符集。 utf8mb4 is a superset of utf8,utf8mb4兼容utf8,且比utf8能表示更多的字符。在做移動(dòng)應(yīng)用時(shí),會(huì)遇到用戶會(huì)輸入emoji表情,如果不做一定處理,就會(huì)導(dǎo)致插入數(shù)據(jù)庫(kù)異常。

修改服務(wù)器端修改數(shù)據(jù)庫(kù)配置文件/etc/my.cnf,添加下面的配置,然后重啟服務(wù)器:

[mysqld]character-set-server=utf8mb4collation_server=utf8mb4_unicode_ciinit-connect="SET NAMES utf8mb4" [mysql]default-character-set=utf8mb4

重啟之后,登錄 mysql,可以通過show variables like 'character%';查看編碼是否已經(jīng)修改成功。修改成功應(yīng)該類似如下:

mysql> show variables like '%char%';+--------------------------+----------------------------------+| Variable_name            | Value                            |+--------------------------+----------------------------------+| character_set_client     | utf8mb4                          || character_set_connection | utf8mb4                          || character_set_database   | utf8mb4                          || character_set_filesystem | binary                           || character_set_results    | utf8mb4                          || character_set_server     | utf8mb4                          || character_set_system     | utf8                             || character_sets_dir       | /usr/local/mysql/share/charsets/ |+--------------------------+----------------------------------+8 rows in set (0.00 sec)然后再修改相應(yīng)的數(shù)據(jù)庫(kù)表的編碼為 utf8mb4:ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4;

轉(zhuǎn)換數(shù)據(jù)表編碼的語(yǔ)句格式如下: ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

客戶端使用不同的編程語(yǔ)言的時(shí)候,可能會(huì)對(duì) utf8mb4 不支持,不能在連接字符串中指定的,此時(shí)可以在獲取連接之后,執(zhí)行set names utf8mb4來(lái)解決這個(gè)問題。比如,對(duì)于 Thinkphp 框架,在配置文件中設(shè)置數(shù)據(jù)庫(kù)連接字符集為 utf8mb4 之后('DB_CHARSET'=>'utf8mb4'),會(huì)出現(xiàn)錯(cuò)誤,提示無(wú)法使用這個(gè)字符集。此時(shí),由于我們已經(jīng)在 mysql 的配置文件中設(shè)置了init-connect="SET NAMES utf8mb4",所以直接將 ThinkPHP 配置文件中的數(shù)據(jù)庫(kù)字符集設(shè)置為空('DB_CHARSET'=>''),則連接數(shù)據(jù)庫(kù)之后,服務(wù)器會(huì)自動(dòng)設(shè)置連接字符集為 utf8mb4,此時(shí)寫入和讀取 emoji 表情就能正常了。擴(kuò)展MySQL 默認(rèn)情況下,無(wú)法存儲(chǔ)中文字符,其實(shí)這和 MySQL 默認(rèn)無(wú)法存儲(chǔ)表情字符是同樣的原因:數(shù)據(jù)庫(kù)字符編碼問題。默認(rèn)情況下,MySQL 使用的字符集是 Latin,所以無(wú)法存儲(chǔ)中文或者其他的一些字符。

如果要存儲(chǔ)中文,可以設(shè)置 MySQL 的字符集為支持中文的字符集,比如 GBK 或者 UTF-8。一般情況下,我們?cè)O(shè)置為 UTF-8,能有更好的兼容性。1.修改 MySQL 配置文件/etc/my.cnf,添加下面的配置,然后重啟服務(wù)器:

[mysqld]character-set-server=utf8 [mysql]default-character-set=utf82.重啟 mysqld 服務(wù),使剛才的修改生效3.如果數(shù)據(jù)庫(kù)中已經(jīng)建有數(shù)據(jù)表了,那么還需要將這些數(shù)據(jù)表的字符集做更改。如果數(shù)據(jù)表有很多,可以導(dǎo)出數(shù)據(jù)庫(kù)和數(shù)據(jù),然后重新建庫(kù)。

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 无锡市| 常熟市| 田林县| 墨脱县| 洛宁县| 图们市| 徐闻县| 福安市| 天镇县| 水城县| 济源市| 会昌县| 独山县| 正镶白旗| 本溪| 务川| 西昌市| 东丽区| 砀山县| 泰来县| 凌源市| 赤峰市| 油尖旺区| 鸡西市| 武胜县| 苍南县| 台东市| 威信县| 黄浦区| 陆良县| 运城市| 子长县| 左权县| 峨边| 马公市| 阿拉尔市| 固原市| 淄博市| 朝阳县| 朝阳县| 丽水市|