如何使用mysql和awk来更改特定数据库的所有字段和表的字符集?我没有包括用户名或密码,所以它肯定不会工作。
我应该按原样运行它并等待,还是需要对其进行修改以处理身份验证?
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 &发布于 2016-04-27 23:12:24
首先备份数据库。有时,字符转换会产生意想不到的结果。
我在使用以下说明时取得了良好的成功:
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的第一行。
echo 'SET foreign_key_checks = 0;' >> /tmp/altertablesstatements.sql导入更改
mysql DATABASE < /tmp/altertablesstatements.sql转换柱
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的第一行。
echo 'SET foreign_key_checks = 0;' >> /tmp/altercolumnsstatements.sql导入更改
mysql DATABASE < /tmp/altercolumnsstatements.sqlhttps://dba.stackexchange.com/questions/40984
复制相似问题