解决用官方容器启动redmine无法插入中文字符的问题

摘要:
jiangzhaowei@kitking:/kitking/redmineIot$sudodocker composeup使用默认驱动程序创建网络“redmineIot_fault”Creatingredmineioo_mysql_1…Creatingredineiot_web_1…Creating redmineios_mysql

  

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,手动的方式是不可取的,可能误操作数据库,因此采用存储过程来实现,下面给出存储过程脚本。

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 ;

将存储过程在数据库所在的服务器上执行一遍,

然后是改变数据库的字符集和字符集合,再更新每个数据表的,执行脚本如下:

ALTER DATABASE redmine DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CALL redmine.update_char_set();

免责声明:文章转载自《解决用官方容器启动redmine无法插入中文字符的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL 查询所有数据库、表名、表字段总结[转]C/C++实现回调机制的几种方式(回调、槽、代理)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Git文件状态描述

检查当前文件状态[root@typhoeus79 ice_test_m git_test]# git status # On branch master nothing to commit (working directory clean) 说明当前git目录很干净,所有已跟踪的文件在上次提交后没有修改过。当前的分支为master Untracked状...

python 全栈开发,Day85(Git补充,随机生成图片验证码)

昨日内容回顾 第一部分:django相关 1.django请求生命周期 </span>1<span style="color: #000000;">. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. &l...

Git:一台电脑上配置两个git账户

如何在一台电脑上配置两个git账户,现在云端仓库很多,有开源中国的 gitee.com 微软的 github.com 还有 gitlab.com 和 bitbucket.org 等等,下面是具体步骤 以 gitee 和 bitbucket 为例,分别对应了两个账户 one@gmail.com 和 two@outlook.com,本文章的命令均用git自带的...

rosdep update问题解决终极方法

转载:https://blog.csdn.net/weixin_42584917/article/details/114448355 最香的终极解决方法,虽然有点麻烦,可是必成功yyds raw.githubusercontent.com实际上就是github的用户数据服务器,rosdep程序下载的就是github.com/ros/rosdistro这个r...

gitlab介绍与操作

Gitlab GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。 与 Github 类似,GitLab 能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访 问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(W...

gitlab 简介

1.gitlab 简介 1.1.定位 gitLab 是一个基于 Git 实现的在线代码仓库托管软件 可以用 gitlab 自己搭建一个类似于 Github 一样的系统,一般用于在企业、学校等内部网络搭建 git 私服。 对于软件工程质量管理非常重要。 1.2.功能 提供代码托管、提交审核和问题跟踪 可以很方便的管理权限、代码 review,创建、管理 p...