解決用官方容器啓動redmine沒法插入中文字符的問題

  

jiangzhaowei@kitking:/kitking/redmineIot$ sudo docker-compose up -d
Creating network "redmineiot_default" with the default driver
Creating redmineiot_mysql_1 ... 
Creating redmineiot_web_1 ... 
Creating redmineiot_mysql_1
Creating redmineiot_web_1 ... done

 

docker exec -it redmineiot_web_1 /bin/bash
root@5737a31e5531:/usr/src/redmine# cd /home/git
root@5737a31e5531:/home/git# chown git:git repositories/
root@5737a31e5531:/home/git# su git
git@5737a31e5531:~$ gitolite setup -pk ../redmine/.ssh/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: keydir/id_rsa.pub duplicates keydir/admin.pub, sshd will ignore it

 

以前採用docker-compose順利搭建了redmine,可是在使用時發現沒法插入中文字符,始終報internal server error錯誤,後來看日誌,顯示插入異常,如今終於明白爲啥不少人安裝不適用官方鏡像了,問題出現了,總得解決吧,進一步分析緣由是因爲數據庫的字符集是latin1,終於明白問題所在,而後去看了下官方給的腳本,默認是使用的utf8編碼,全部的數據庫表建立都是未指定字符集的,所以採用數據庫腳原本變動,要想把全部的數據表的字符集改變爲utf-8,手動的方式是不可取的,可能誤操做數據庫,所以採用存儲過程來實現,下面給出存儲過程腳本。mysql

jiangzhaowei@kitking:/kitking/redmineIot$ docker exec -it redmineiot_mysql_1 /bin/bash
root@c5588a506b78:/# mysql -uredmine -py0ur_passw0rd

 

DELIMITER $$
CREATE PROCEDURE `redmine`.`update_char_set`()
    BEGIN
     DECLARE done INT DEFAULT 0;
     DECLARE t_sql VARCHAR(256);
     DECLARE tableName VARCHAR(128);
     DECLARE lists CURSOR FOR SELECT table_name FROM `information_schema`.`TABLES` WHERE table_schema = 'redmine';
     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
     OPEN lists;
     FETCH lists INTO tableName;
     REPEAT
        SET @t_sql = CONCAT('ALTER TABLE ', tableName, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');
        PREPARE stmt FROM @t_sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
     FETCH lists INTO tableName;
     UNTIL done END REPEAT;
     CLOSE lists;
    END$$
DELIMITER ;

將存儲過程在數據庫所在的服務器上執行一遍,git

而後是改變數據庫的字符集和字符集合,再更新每一個數據表的,執行腳本以下:web

ALTER DATABASE redmine DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CALL redmine.update_char_set();
相關文章
相關標籤/搜索