我有一个约 400 列的 MySQL 表
这些列是从外部数据中积累的,所以 我最初至少无法控制计数
为了在制作列时避免错误,这些只是文本数据类型,现在拥有他们可能需要的所有行
我现在正在尝试优化数据,我知道该怎么做,但同样,我想尽可能避免错误
TLDR:我想迭代每一列并确定数据类型(即 TINYINT、INT、VARCHAR(?)、CHAR(?)、BOOLEAN、TEXT 等)
我了解如何遍历数据,但我更关心准确性和确保数据完整性,所以我要问的是,是否有人知道任何资源或指向将执行此确切功能的现有代码的链接?
我不想错过任何这些数据类型的任何细微差别或特殊情况,如果资源存在,不重新发明轮子才有意义?
这是 information_schema 的工作。
这个查询做你需要的。
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'whatever_table_name'
AND TABLE_SCHEMA = DATABASE()
ORDER BY ORDINAL_POSITION;
像HeidiSQL和MySQL Workbench这样好的交互工具也可以以有用的形式显示您需要的元数据(描述数据的数据)。
另一个可能的技巧:将随机选择的几千行导出到 .csv 文件并将其导入 Excel 或 LibreOffice Calc。这些程序将尝试猜测数据类型。
交互式工具或命令行工具可以进行导出。将随机选择的行放入 .csv 文件的查询类似于
SELECT *
FROM table
WHERE id IN (SELECT id FROM table ORDER BY RAND() LIMIT 1000)
INTO OUTFILE 'sample.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
假设
id
是主键。
这会有点慢,所以不要经常这样做。
这是一个难题 - 有几个 选项 可供您使用。我找到的最完整的解决方案是在 Python 中,称为 Tableschema。你给它数据——CSV 是最简单的——然后让它推断模式。
因此,您可以使用@o.jones 的代码将随机的 1000 行导出到 CSV,然后将其输入 Tableschema,并使用它来创建具有更准确字段类型的表。