MySQL小技巧
批量移除一定相同命名前缀的数据表
不知道哪个有才的脚本,在数据库里加了一堆无意义前缀的表。
删除方式很多,然而最终都是殊途同归,比如读出所有表名称,然后输出删表语句。
这里可以选择直接用 SQL 解决问题:
SELECT CONCAT('drop table ', table_name, ';')
FROM information_schema.tables
WHERE table_schema= 'YourDatabase'
AND table_name LIKE 'prefix_%' ;
手动转换表数据默认字符集
有一些云控制台实现的非常粗糙,创建的时候选项比较单一,选择不到我们所需要的字符集,只能靠创建后手动调整了:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `tbname` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `tbname` DEFAULT CHARACTER SET=utf8mb4, COLLATE=utf8mb4_bin;
另外,为了避免转换过程中失败,可以调整 innodb_large_prefix on
参数
这里可以借助灵活的 js 来快速解决战斗,批量生成转换语句:
tpl = (tblName)=>`ALTER TABLE \`${tblName}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;`;
tables = `history
...
...
...
user_relation
usercontent_relation
users`.split('\n').filter(n=>n).map(n=>tpl(n))
console.log(tables.join('\n'))