数据库现在是latin1_general_ci,我想将排序规则更改为utf8mb4_general_ci。
在PhpMyAdmin中是否有任何设置来更改数据库,表,列的排序规则?而不是一个一个地改变?
数据库现在是latin1_general_ci,我想将排序规则更改为utf8mb4_general_ci。
在PhpMyAdmin中是否有任何设置来更改数据库,表,列的排序规则?而不是一个一个地改变?
当前回答
要更改表的排序规则,您可以使用,
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8
若要为整个数据库设置默认排序规则,请执行以下操作
ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
否则,
Goto PhpMyAdmin - >操作- >排序。
在这里,您可以找到包含所有现有排序规则的选择框。这样你就可以改变排序规则。在创建新列时,数据库表将遵循这个排序规则。创建新列时不需要选择排序规则。
其他回答
我的解决方案是@Dzintars和@Quassnoi Answer的组合。
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," CONVERT TO CHARACTER SET utf8mb4 ;") AS ExecuteTheString
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="<your-database>"
AND TABLE_TYPE="BASE TABLE";
通过使用CONVERT TO,这将生成一个脚本,它将<your-database>的所有表转换为所需的编码。这也改变了每一列的编码!
我使用了以下shell脚本。它将数据库名作为参数,并将所有表转换为另一个字符集和排序规则(由脚本中定义的另一个参数或默认值给出)。
#!/bin/bash
# mycollate.sh <database> [<charset> <collation>]
# changes MySQL/MariaDB charset and collation for one database - all tables and
# all columns in all tables
DB="$1"
CHARSET="$2"
COLL="$3"
[ -n "$DB" ] || exit 1
[ -n "$CHARSET" ] || CHARSET="utf8mb4"
[ -n "$COLL" ] || COLL="utf8mb4_general_ci"
echo $DB
echo "ALTER DATABASE $DB CHARACTER SET $CHARSET COLLATE $COLL;" | mysql
echo "USE $DB; SHOW TABLES;" | mysql -s | (
while read TABLE; do
echo $DB.$TABLE
echo "ALTER TABLE $TABLE CONVERT TO CHARACTER SET $CHARSET COLLATE $COLL;" | mysql $DB
done
)
如果你想更新架构的默认字符集:
ALTER SCHEMA MYSCHEMA DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;
快速方法-导出到SQL文件,使用搜索和替换来更改您需要更改的文本。创建新数据库,导入数据,然后将旧数据库和新数据库重命名为旧名称。
要更改表的排序规则,您可以使用,
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8
若要为整个数据库设置默认排序规则,请执行以下操作
ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
否则,
Goto PhpMyAdmin - >操作- >排序。
在这里,您可以找到包含所有现有排序规则的选择框。这样你就可以改变排序规则。在创建新列时,数据库表将遵循这个排序规则。创建新列时不需要选择排序规则。