Laravel支持emoji表情存儲(chǔ)MySQL數(shù)據(jù)庫(kù)

由于需要實(shí)現(xiàn)emoji表情評(píng)論的功能,所以數(shù)據(jù)庫(kù)需要支持emoji表情的存儲(chǔ),根據(jù)查詢的資料最終實(shí)現(xiàn)了該功能,現(xiàn)將實(shí)現(xiàn)的過程以及過程遇到的一些問題記錄下來(lái),供大家參考和交流。

mysql的utf8編碼的一個(gè)字符最多3個(gè)字節(jié),但是一個(gè)emoji表情為4個(gè)字節(jié),所以u(píng)tf8不支持存儲(chǔ)emoji表情。但是utf8的超集utf8mb4一個(gè)字符最多能有4字節(jié),所以能支持emoji表情的存儲(chǔ)。下面介紹了關(guān)于如何修改mysql數(shù)據(jù)庫(kù)的編碼格式變?yōu)閡tf8mb4的具體方法。

Linux系統(tǒng)中MySQL的配置文件為my.cnf。(注:有空把mysql默認(rèn)編碼改為utf8的實(shí)現(xiàn)過程也記錄下來(lái))

Winows中的配置文件為my.ini。

1.修改mysql的配置文件

找到/etc/mysql路徑下的my.cnf文件,通過vi命令打開該文件并進(jìn)行編輯,需添加如下所示配置:

[client]

default-character-set=utf8mb4

[mysqld]

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect=’SET NAMES utf8mb4'

[mysql]

default-character-set=utf8mb4

修改完畢之后,通過wq保存退出

2.修改database/table和column的字符集

進(jìn)入mysql中,按下述所示進(jìn)行命令的執(zhí)行:

1) 修改database的字符集:

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

示例:

ALTER DATABASE xxxdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

2) 步驟1)執(zhí)行完成之后,需要執(zhí)行use 數(shù)據(jù)庫(kù)名,指明當(dāng)前需要進(jìn)行字符集修改的數(shù)據(jù)庫(kù);示例:use xxxdb;

3)修改table的字符集:

ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

示例:

ALTER TABLE user_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4) 修改column的字符集:

ALTER TABLE 表名 CHANGE 字段名 字段名 該字段原來(lái)的數(shù)據(jù)類型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

示例:

ALTER TABLE user_comments CHANGE content content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

上述修改完畢,exit退出mysql

3.重啟mysql

這里重啟的時(shí)候我一開始用的是service mysql restart,最后發(fā)現(xiàn)這條命令并不管用,重啟沒有成功,導(dǎo)致后面查看字符集的時(shí)候,并沒有達(dá)到想要的字符集的狀態(tài)。

所以采用下面的方法才可以正確的重啟mysql.

3.1停止msql的運(yùn)行

通過/etc/init.d/mysql執(zhí)行stop命令

3.2啟動(dòng)mysql

通過/etc/init.d/mysql執(zhí)行start命令

4.檢查字符集:

進(jìn)入mysql中,用SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';命令查看字符集的情況

上述步驟實(shí)現(xiàn)之后便可成功使用emoji表情存儲(chǔ)進(jìn)mysql數(shù)據(jù)庫(kù)的功能了。

————————————————————————————————————————————————————————————————

由于mysql數(shù)據(jù)庫(kù)是需要備份和還原的,所以帶有emoji表情的.sql文件的導(dǎo)入和導(dǎo)出的時(shí)候需要注意執(zhí)行時(shí)的編碼格式,以下為導(dǎo)入與導(dǎo)出的具體操作:

5.帶有emoji表情的sql文件的導(dǎo)入與導(dǎo)出(主要為windows中的導(dǎo)出)

(若是在服務(wù)端的代碼中的導(dǎo)出為:mysqldump –default-character-set-utf8mb4 –u 用戶名 –p 數(shù)據(jù)庫(kù)名 > 導(dǎo)出該文件的物理路徑;導(dǎo)入的命令不需要指明編碼格式,只需要正常的執(zhí)行命令便可)

5.1導(dǎo)出

在進(jìn)行把后綴名為.sql的文件,且文件數(shù)據(jù)中包含emoji表情的數(shù)據(jù),進(jìn)行備份導(dǎo)出的時(shí)候,此時(shí)不要使用第三方軟件進(jìn)行導(dǎo)出,而是使用命令行的形式執(zhí)行該導(dǎo)出動(dòng)作,其主要原因是使用第三方導(dǎo)出該文件時(shí),由于其默認(rèn)的導(dǎo)出的編碼格式為utf-8,該編碼格式最多只支持3個(gè)字節(jié),而一個(gè)emoji表情有4個(gè)字節(jié),這將導(dǎo)致emoji表情的數(shù)據(jù)變成亂碼。所以在本地導(dǎo)出的時(shí)候具體操作步驟如下:

一、 打開cmd,先找到mysqldump這個(gè)執(zhí)行文件所在的路徑;

二、 在路徑后輸入mysqldump –default-character-set-utf8mb4 –u 用戶名 –p 數(shù)據(jù)庫(kù)名 > 導(dǎo)出該文件的物理路徑,按“Enter”,即可完成導(dǎo)出功能,在導(dǎo)出的物理路徑中即可找到已被導(dǎo)出的該文件。

5.2導(dǎo)入

把linux系統(tǒng)中的.sql文件導(dǎo)入到本地的時(shí)候,不要使用Navicat Premium來(lái)進(jìn)行導(dǎo)入,而是使用如下所示的命令行中的source .sql文件的物理路徑,來(lái)進(jìn)行如下的導(dǎo)入。

6.1使用的laravel框架如果出現(xiàn)表情插入數(shù)據(jù)庫(kù)中為問號(hào)

需要修改

在laravel的數(shù)據(jù)庫(kù)配置文件`config/databases.php`中設(shè)置mysql連接的編碼

'mysql' => [

'driver' => 'mysql',

'host' => env('DB_HOST', 'localhost'),

'port' => env('DB_PORT', '3306'),

'database' => env('DB_DATABASE', 'forge'),

'username' => env('DB_USERNAME', 'forge'),

'password' => env('DB_PASSWORD', ''),

'charset' => 'utf8mb4',? //重點(diǎn)

'collation' => 'utf8mb4_unicode_ci',? //重點(diǎn)

'prefix' => 'FN_',

'strict' => false,

'engine' => null,

],

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • https://my.oschina.net/wingyiu/blog/153357 MYSQL 5.5 之前, ...
    愛蛇閱讀 2,879評(píng)論 0 0
  • 轉(zhuǎn) 問題描述: 如果UTF8字符集且是Java服務(wù)器的話,當(dāng)存儲(chǔ)含有emoji表情時(shí),會(huì)拋出類似如下異常: jav...
    天上掉陷阱閱讀 799評(píng)論 0 3
  • 一、完成時(shí)間及成果: (一)、9月10日定的周目標(biāo),從9月11日至9月17日,最初預(yù)計(jì)時(shí)間是54.5小時(shí),三天應(yīng)該...
    小奇之旅閱讀 169評(píng)論 0 0
  • nomoreoo閱讀 422評(píng)論 0 0
  • 夢(mèng)隨風(fēng)萬(wàn)里,雪融似淚珠。 念千古風(fēng)情,又到春碧雨。 ...
    千樽羽心閱讀 885評(píng)論 2 2

友情鏈接更多精彩內(nèi)容