如何将整个MySQL数据库字符集转换为UTF-8并将排序规则转换为UTF-8?
#1楼
在命令行外壳上
如果您是命令行外壳程序之一,则可以非常快速地执行此操作。 只需填写“ dbname”:D
DB="dbname"
(
echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names \
| xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
) \
| mysql "$DB"
一线可轻松复制/粘贴
DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"
#2楼
您可以创建sql以使用以下命令更新所有表:
SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci; ",
"ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ")
AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = your_database_name;
捕获输出并运行它。
阿诺德·丹尼尔斯的上述回答更为优雅。
#3楼
如果您无法使表转换,或者表始终设置为某些非utf8字符集,但是您想要utf8,则最好的选择是清除它并重新开始并显式指定:
create database database_name character set utf8;
#4楼
唯一对我有用的解决方案: http : //docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8
转换包含表的数据库
mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
cp dump.sql dump-fixed.sql
vim dump-fixed.sql
:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq
mysql -uusername -ppassword < dump-fixed.sql
#5楼
如果数据不是相同的字符集,则可以考虑从http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html中获取此代码段
如果该列具有非二进制数据类型(CHAR,VARCHAR,TEXT),则其内容应以列字符集而不是其他字符集编码。 如果内容以不同的字符集编码,则可以先将该列转换为使用二进制数据类型,然后再转换为具有所需字符集的非二进制列。
这是一个例子:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 VARCHAR(100) CHARACTER SET utf8;
确保选择正确的排序规则,否则可能会遇到唯一的键冲突。 例如,在某些整理中,Éleanore和Eleanore可能被认为是相同的。
在旁边:
我遇到的情况是,即使某些字符以UTF-8格式存储在数据库中,电子邮件中的某些字符也会“中断”。 如果要使用utf8数据发送电子邮件,则可能还希望将电子邮件转换为以UTF8格式发送。
在PHPMailer中,只需更新以下行: public $CharSet = 'utf-8';
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3161582