38

我的数据库不是 UTF8,我想将所有表都转换为 UTF8,我该怎么做?

4

5 回答 5

46

对于单表,您可以执行以下操作:

ALTER TABLE tab CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

对于整个数据库,我不知道与此类似的其他方法:

http://www.commandlinefu.com/commands/view/1575/convert-all-mysql-tables-and-fields-to-utf8

于 2010-01-27T21:24:20.880 回答
33

替换my_database_name为您的数据库名称

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_TYPE != 'VIEW';

这将构建大量可以运行的查询

于 2018-01-19T13:46:30.770 回答
15
mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql
于 2010-01-27T21:21:59.637 回答
0

更好的是,使用 Percona 的工具包。我会在更新到 utf8mb4 之前审核您的索引,因为密钥长度存在问题。

SELECT CONCAT('pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8 
COLLATE utf8_unicode_ci" t=', TABLE_NAME, ',D=DB_NAME,u=USER_NAME --statistics --execute') 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'DB_NAME' AND TABLE_TYPE != 'VIEW' AND TABLE_COLLATION NOT LIKE '%utf8%';
于 2019-03-20T17:43:49.050 回答
0

要更改 phpMyAdmin 中的排序规则,只需按照以下简单步骤操作:

方法一

  • 打开 phpMyAdmin 并选择您的数据库。

  • 单击数据库后,单击操作选项卡。 在此处输入图像描述

  • 接下来,向下滚动页面,您将看到排序规则部分。

    • 设置您想要的排序规则并单击复选框。
    • 您的排序规则将被更新。 在此处输入图像描述

注意:如果您发现使用 sql 命令行的method 1后续操作有任何困难。method 2

方法二

使用命令行

  • 打开phpMyAdmin并单击SQL选项卡。 在此处输入图像描述
  • 接下来,编写用于更改数据库排序规则的命令。
# syntax command:

ALTER DATABASE your_db_name CHARACTER SET utf8 COLLATE write_collation;

# e.g:
ALTER DATABASE temprory CHARACTER SET utf8 COLLATE utf8_general_ci;
于 2022-02-01T07:49:20.047 回答