如何将整个MySQL数据库字符集和排序规则转换为UTF-8?

家住魔仙堡 提交于 2020-02-25 19:04:35

如何将整个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';

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!