首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将mysql中所有字段和表的字符集更改为utf8

将mysql中所有字段和表的字符集更改为utf8
EN

Database Administration用户
提问于 2013-04-26 02:55:21
回答 1查看 706关注 0票数 2

如何使用mysqlawk来更改特定数据库的所有字段和表的字符集?我没有包括用户名或密码,所以它肯定不会工作。

我应该按原样运行它并等待,还是需要对其进行修改以处理身份验证?

代码语言:javascript
复制
mysql --database=dbname -B -N -e "SHOW TABLES" \
| awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' \
| mysql --database=dbname &
EN

回答 1

Database Administration用户

发布于 2016-04-27 23:12:24

首先备份数据库。有时,字符转换会产生意想不到的结果。

我在使用以下说明时取得了良好的成功:

代码语言:javascript
复制
SELECT CONCAT('ALTER TABLE ',  table_name, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') INTO OUTFILE '/tmp/altertablesstatements.sql'
FROM
information_schema.tables
WHERE
    table_schema='<database-name>'
AND table_collation != 'utf8' 
GROUP BY table_name;

将禁用foreign_key_checks添加到sql的第一行。

代码语言:javascript
复制
echo 'SET foreign_key_checks = 0;' >> /tmp/altertablesstatements.sql

导入更改

代码语言:javascript
复制
mysql DATABASE  < /tmp/altertablesstatements.sql

转换柱

代码语言:javascript
复制
SELECT CONCAT(  'ALTER TABLE <DATABASE>.', table_name,  ' CHANGE ',COLUMN_NAME,'  ',COLUMN_NAME,' ',COLUMN_TYPE,' CHARACTER SET utf8 COLLATE utf8_general_ci',
IF(IS_NULLABLE='NO',' NOT NULL;',' NULL;')) INTO OUTFILE '/tmp/altercolumnsstatements.sql'
FROM information_schema.COLUMNS AS tb
WHERE TABLE_SCHEMA =  '<DATABASE>'
AND character_set_name != 'utf8';

将禁用foreign_key_checks添加到sql的第一行。

代码语言:javascript
复制
echo 'SET foreign_key_checks = 0;' >> /tmp/altercolumnsstatements.sql

导入更改

代码语言:javascript
复制
mysql DATABASE  < /tmp/altercolumnsstatements.sql

https://confluence.atlassian.com/jirakb/how-to-change-all-columns-and-tables-collation-to-utf8_bin-in-mysql-601456761.html

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/40984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档