博文

Docker 多階段構建示例 + Docker Hexo

多階段構建 (multi-stage build) ,如可使用 `alpine` ,再 `apk add` 一些相關編譯包進行編譯,最後縮小鏡像 。使用 Hexo 作為示例 前期準備拉取 hexo source/_post 的分支hexo 分支為 hexo markdown 源碼分支git pull origin hexo1
2
3
4
mkdir -p ~/hexo/source
cd ~/hexo/source
git init
git pull https://github.com/yanzhe919/yanzhe919.github.io.git hexo:hexo
順便解釋一下, git pull origin hexo 相當於 git fetch origin hexo + git checkout -b hexo origin/hexocd ~/hexo ,以下操作都在 ~/hexo 下執行以前正常使用 Dockerfile ,如 node:lts編輯並創建 Dockerfile , vim Dockerfile_ltsvim Dockerfile_lts1
2
3
4
5
6
7
FROM node:lts as build
LABEL maintainer="yan zhe <[email protected]>"

MySQL 中 utf8 和 utf8mb4 的使用以及字符集相關

MySQL 中 utf8 編碼最長使用 3 字節,在 5.5.3 新增的 utf8mb4,才是兼容四字節的。Java 的 UTF-8 是支持 4 字節的,所以不需配置 mb4 。而 Java 驅動會自動檢測服務端的 character_set_server,為 utf8mb4,驅動在建立連接時設置 SET NAMES utf8mb4。utf8mb4_general_ci 在比較和排序的時候更快,utf8mb4_unicode_ci 更精確。原文概述以前一般在 MySQL 開發了,就實際上轉向 Oracle 了,沒留意一些東西,碰到了就回頭過來看看。
有小夥伴在安裝 MySQL 後設置編碼為 utf8,我們以前都是會直接設置 utf8mb4,這背後又隱藏著什麼?這一切的背後,究竟是人性的扭曲還是道德的淪喪?其實隻是因為 Unicode 委員會還做著 “65535 個字符足夠全世界用了”的美夢。參考 我比較喜歡這句。
也就是指的 Unicode 最初的基本多文本平麵 (BMP)(U+0000 至 U+FFFF),BMP 已經包含了控製符、拉丁文,中、日、韓等絕大多數國際字符,但並不是所有,最常見的就算現在手機端常用的表情字符 Emoji(Emoji 是一種特殊的 Unicode 編碼,常見於 ios 和 android 手機上)一些不常用的漢字,如 “墅” ,這些需要四個字節才能編碼出來。後來的補充字符 (U+10000 至 U+10FFFF),則將 Unicode 擴充到了 (U+0000 至 U+10FFFF)。注:QQ 裏麵的內置的表情不算,它是通過特殊映射到的一個 gif 圖片。一般輸入法自帶的就是。MySQL 在 5.5.3 之後 (查看版本:select version ();) 增加了這個 utf8mb4 的編碼,mb4 就是 most bytes 4 的意思,支持的字節數最大為 4,即專門用來兼容四字節的 unicode。
而我們通常在 MySQL 中所說的 utf8 編碼,其實就是指的 utf8mb3 。utf8mb4 是 utf8mb3 的超集並完全兼容 utf8mb3,能夠用四個字節存儲更多的字符。utf8mb3:Unicode 字符集的 UTF-8 編碼,每個字符使用 1 到 3 個字節。
utf8mb4:Unicode 字符集的 UTF-8 編碼,每…