如何改变MySql数据库中 的排序_如何更改数据库的默认排序规则?

除了David Whittaker发布的内容之外,我还创建了一个查询,该查询生成完整的表和将更改每个表的列alter语句。跑步可能是一个好主意

SET SESSION group_concat_max_len = 100000;

首先要确保您的小组比赛不会超过这里看到的很小的限制。

SELECT a.table_name, concat('ALTER TABLE ', a.table_schema, '.', a.table_name, ' DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci, ',

group_concat(distinct(concat(' MODIFY ',  column_name, ' ', column_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ', if (is_nullable = 'NO', ' NOT', ''), ' NULL ',

if (COLUMN_DEFAULT is not null, CONCAT(' DEFAULT \'', COLUMN_DEFAULT, '\''), ''), if (EXTRA != '', CONCAT(' ', EXTRA), '')))), ';') as alter_statement

FROM information_schema.columns a

INNER JOIN INFORMATION_SCHEMA.TABLES b ON a.TABLE_CATALOG = b.TABLE_CATALOG

AND a.TABLE_SCHEMA = b.TABLE_SCHEMA

AND a.TABLE_NAME = b.TABLE_NAME

AND b.table_type != 'view'

WHERE a.table_schema = ? and (collation_name = 'latin1_swedish_ci' or collation_name = 'utf8mb4_general_ci')

GROUP BY table_name;

上一个答案之间的区别是它使用utf8而不是ut8mb4并使用t1.data_type和t1.CHARACTER_MAXIMUM_LENGTH对于枚举无效。另外,我的查询排除了视图,因为这些视图必须分别更改。

我只是使用Perl脚本将所有这些更改作为数组返回并遍历它们,修复了过长的列(通常为varchar(256),当数据中通常只有20个字符时,因此很容易解决)。

从latin1-> utf8mb4进行更改时,我发现某些数据已损坏。看来是utf8编码的latin1字符在列中会在转换中出错。我只是简单地保存了更改前后的列中的数据,这些列我知道这将是内存中的问题,并对其进行比较并生成用于修复数据的更新语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值