我有一个存储用户输入的表,因此为了允许国家字符,我将 charset 设置为utf8mb4。
然后我有第二个表,它可以变得非常大(100+ 数百万行),我 100% 确定这个表将只存储 ASCII 字符,所以我将此表的字符集设置为latin1以节省磁盘空间。
在一个数据库中的表之间使用不同的字符集有什么缺点吗?它被认为是不好的做法吗?
或者有没有其他方法可以解决这个问题?(以保持磁盘占用最小并允许国家字符)
编辑:
其输出show create table
需要用户输入(并具有 utf8mb4)
CREATE TABLE `sensor` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`label` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` varchar(3000) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created` datetime(6) NOT NULL,
`state` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`region` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`model_reference` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `label` (`label`),
KEY `id` (`id`),
KEY `sensor_ibfk_1` (`model_reference`),
FULLTEXT KEY `fulltext_index`(`label`,`description`,`state`,`region`),
CONSTRAINT `sensor_ibfk_1` FOREIGN KEY (`model_reference`) REFERENCES `model` (`id`) ON DELETE SET NULL ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
其输出show create table
是自动生成的(并且具有 latin1)
CREATE TABLE `sensor_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sensor_reference` int(20) DEFAULT NULL,
`temperature` varchar(16) DEFAULT NULL,
`pressure` varchar(16) DEFAULT NULL,
`at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`),
KEY `sensor_history_ibfk_1` (`sensor_reference`),
CONSTRAINT `sensor_history_ibfk_1` FOREIGN KEY (`sensor_reference`) REFERENCES `sensor` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1