mysql批量修改数据(mysql批量替换字符串)

mysql批量修改数据(mysql批量替换字符串)

《复仇者联盟4:终局之战》队长退休。开始之前

这里还有一个mysql字符乱码的例子,部署redmine过程中,mysql数据库使用了默认的字符集,导致含有中文内容为乱码。

解决这个问题有两种方法:

一、参考《为什么Docker创建的mysql容器字符乱码?》这篇文章,重来一遍并选择正确的字符集。

二、修改配置文件设置utf8字符集,对已经存在的数据,使用alter语句修改数据表的字符集。

这里采用第二种方式,不过数据库内的数据表较多,我们使用shell脚本批量完成这个工作。

环境描述

redmine 需要 php mysql 运行环境 (LNMP)

mysql版本: mysql-5.6php版本: 5.6redmine: 2.6database.yml 编码为 encoding: utf8操作步骤

1. 配置文件

# 写入转换字符集的表名,每行一个。cat tables.txtattachments workflows # 省略….

2. shell脚本

如果你不清楚 alter 语句使用方法,请参考《运维常用 mysql 语句》”修改表的字符集”的示例。

3. 执行脚本

bash -x convert_mysql_charset.sh

MySql 字符集

mysql 对于字符集的设置有四个层次:

服务器(server)

数据库(database)

数据表(table)

连接(connection)。

1. 字符集规则

默认的配置包括以下:

1)编译,指定了一个默认的字符集,默认字符集是latin1。

2)安装,可以在配置文件my.cnf中指定一个默认的的字符集,如果没指定这个值则继承编译时指定的。

3)启动 mysqld,可以在命令行参数中指定一个默认的的字符集,如果没指定这个值继承自配置文件中的配置, 此时 character_set_server 被设定为这个默认的字符集。

4)创建数据库,除非明确指定,否则数据库的字符集被缺省设定为 character_set_server 。

5)选定数据库,character_set_database 被设定为这个数据库默认的字符集。

6)创建一张表,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集。

7)添加字段,除非明确指定,否则缺省的字符集就是表默认的字符集;

2. 查看默认字符集默认情况下,mysql的字符集是 latin1。

mysql> show variables like ‘%char%’; ————————– —————————- | Variable_name | Value | ————————– —————————- | character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ | ————————– —————————- 8 rows in set (0.01 sec)#mysql> show variables like ‘%collation%’; ———————- ——————- | Variable_name | Value | ———————- ——————- | collation_connection | latin1_swedish_ci || collation_database | latin1_swedish_ci || collation_server | latin1_swedish_ci | ———————- ——————- 3 rows in set (0.00 sec)

3. 修改默认字符集

最简单的修改方法,就是修改mysql的配置文件(my.cnf)中的字符集

cat /etc/my.cnf# 其它配置项省略…default-character-set = utf8character_set_server = utf8# 修改完后,重启mysql的服务。/etc/init.d/mysqld restart

参考文章

《mysql编译安装脚本》

《Redmine Garbled》

小结

最后来总结下文章中的知识点

默认情况下,mysql的字符集是 latin1,为了解决乱码问题请使用utf8。

对于已经保存在mysql数据库的数据,可以使用shell脚本 alter语句批量更改字符集。

发表评论

登录后才能评论