如何使用 PHP 从现有 MySQL 列中探测最佳数据类型?

问题描述 投票:0回答:2

我有一个约 400 列的 MySQL 表

这些列是从外部数据中积累的,所以 我最初至少无法控制计数

为了在制作列时避免错误,这些只是文本数据类型,现在拥有他们可能需要的所有行

我现在正在尝试优化数据,我知道该怎么做,但同样,我想尽可能避免错误

TLDR:我想迭代每一列并确定数据类型(即 TINYINT、INT、VARCHAR(?)、CHAR(?)、BOOLEAN、TEXT 等)

我了解如何遍历数据,但我更关心准确性和确保数据完整性,所以我要问的是,是否有人知道任何资源或指向将执行此确切功能的现有代码的链接?

我不想错过任何这些数据类型的任何细微差别或特殊情况,如果资源存在,不重新发明轮子才有意义?

php mysql sqldatatypes
2个回答
0
投票

这是 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;

HeidiSQLMySQL 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
是主键。

这会有点慢,所以不要经常这样做。


0
投票

这是一个难题 - 有几个 选项 可供您使用。我找到的最完整的解决方案是在 Python 中,称为 Tableschema。你给它数据——CSV 是最简单的——然后让它推断模式。

因此,您可以使用@o.jones 的代码将随机的 1000 行导出到 CSV,然后将其输入 Tableschema,并使用它来创建具有更准确字段类型的表。

© www.soinside.com 2019 - 2024. All rights reserved.