各位在使用Redmine時,如果資料庫編碼正確的話,相信中文字是可以正常顯示的,不過會遇到另一個問題是一些特殊符號或表情符號無法支援,只要一輸入就可能會造成破圖或者出現Internal Error (如下圖),錯誤的原因很簡單,十之八九是資料庫的編碼不對而已,原本的編碼有可能是utf8、latin1,但這些編碼無法滿足某些特別的字符,因此,想要支援表情符號的話只要把編碼改成更強大的 utf8mb4 字符編碼就行囉,簡單的來說,utf8mb4是utf8的Superset,能支持更多的字符。
註:如果有遇到中文亂碼的問題,以下的教學也可以適用。
如何查詢資料庫編碼
各位可以先查看一下自己的資料庫編碼是否符合預期,指令如下(登入MySQL/MariaDB後執行),如果要進一步討論中文亂碼相關的問題,也可以參考這篇文章
show variables like "%character_set%";
變更資料庫編碼至UTF8MB4
需要把資料庫編碼變成「utf8mb4」,才能解決一些特殊文字、表情符號的呈現問題,而這部分可能還牽扯到一些資料庫、表格、欄位的轉換,所以這邊直接提供了二個方法給大家參考,請選擇自己適合的方式進行
方法一:利用MySQL/MariaDB的指令進行轉換
在網路上有高手把要轉換的地方寫成了自動偵測的腳本,原文在此,其步驟簡述如下:
Step 1、變更之前建議先備份資料庫,可參考之前教大家的「MySQL/MariaDB資料庫備份」文章
Step 2、把下面語法中的
USE information_schema;
SELECT CONCAT("ALTER DATABASE `",table_schema,"` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;") AS _sql
FROM `TABLES` WHERE table_schema LIKE "YOUR_DATABASE_NAME" AND TABLE_TYPE='BASE TABLE' GROUP BY table_schema UNION
SELECT CONCAT("ALTER TABLE `",table_schema,"`.`",table_name,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") AS _sql
FROM `TABLES` WHERE table_schema LIKE "YOUR_DATABASE_NAME" AND TABLE_TYPE='BASE TABLE' GROUP BY table_schema, table_name UNION
SELECT CONCAT("ALTER TABLE `",`COLUMNS`.table_schema,"`.`",`COLUMNS`.table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type,"(",character_maximum_length,") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") AS _sql
FROM `COLUMNS` INNER JOIN `TABLES` ON `TABLES`.table_name = `COLUMNS`.table_name WHERE `COLUMNS`.table_schema like "YOUR_DATABASE_NAME" and data_type in ('varchar','char') AND TABLE_TYPE='BASE TABLE' UNION
SELECT CONCAT("ALTER TABLE `",`COLUMNS`.table_schema,"`.`",`COLUMNS`.table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") AS _sql
FROM `COLUMNS` INNER JOIN `TABLES` ON `TABLES`.table_name = `COLUMNS`.table_name WHERE `COLUMNS`.table_schema like "YOUR_DATABASE_NAME" and data_type in ('text','tinytext','mediumtext','longtext') AND TABLE_TYPE='BASE TABLE';
Step 3、執行以下指令來產生
mysql -u root -p -s < gen_queries.sql > queries.sql
Step 4、執行以下指令進行資料庫轉檔
mysql -u root -p < queries.sql
這方法雖然比較麻煩一點,但適合一些沒有使用資料庫輔助工具的用戶,親試過是可行的
方法二:使用phpMyAdmin完成轉換
如果你本身有用「phpMyAdmin」來操作資料庫的話那就更方便啦,請於登入phpMyAdmin之後,在左邊選擇Redmine使用的資料庫,要注意的是下圖只是示意,你需要選擇你的資料庫名稱 (如果你是按本網站的教學系列一路做下來,那麼資料庫名稱為 redmine_default ),選擇好之後再點擊右邊的「操作」頁籤
在「操作」頁面中請將網頁拉到下方,並在「編碼與排序」的分項中,完成以下動作:
- 將編碼設成
utf8mb4_unicode_ci 或者utf8mb4_general_ci ,建議前者 - 勾選「更改所有資料表的編碼與排序」及「更改所有資料表欄位的編碼與排序」(註:前者勾選之後,後者才會出現),並按「執行」進行資料庫的編碼轉換
不管你使用上述哪個方法都可以達到UTF8MB4編碼的轉換效果,而最後一步就是到Redmine試試看是否可以正常輸入表情符號囉
延伸閱讀:
.Redmine 專案管理工具教學系列
.[Mac] 快速啟動表情符號表,很多人不知道的熱鍵密技
.[教學] MariaDB/MySQL備份 – 如何匯出、匯入資料庫或表格
.[Mariadb] 如何解決資料庫中文亂碼(問號)的編碼問題
.Set value of character_set_client to utf8mb4