【发布时间】:2009-08-07 03:21:41
【问题描述】:
如果一列是 int 类型并说其值为 10。另一列是 varchar 类型且值为 '10'。加入这些值 (mySql) 是否安全,我会得到与 int 类型和值 10 相同的结果吗?
我需要有不同类型的它们,因为在一个表中,列是一个自动递增键(所以它必须是 int)。另一列(在不同的表中)有时可能包含带有字母的值,因此我必须将其设为 varchar。你能预见到这有什么大问题吗?或者我应该重新考虑我的架构?
【问题讨论】:
如果一列是 int 类型并说其值为 10。另一列是 varchar 类型且值为 '10'。加入这些值 (mySql) 是否安全,我会得到与 int 类型和值 10 相同的结果吗?
我需要有不同类型的它们,因为在一个表中,列是一个自动递增键(所以它必须是 int)。另一列(在不同的表中)有时可能包含带有字母的值,因此我必须将其设为 varchar。你能预见到这有什么大问题吗?或者我应该重新考虑我的架构?
【问题讨论】:
这种方法有两个问题:
MySQL 不会在此类连接中使用索引 - 根据您的情况(表大小/查询/等),这可能会或可能不会是一个大问题
在数据库设计方面,这闻起来很腥。也许这是我可怜的想象力:-) 但我想不出这样的例子是合理的。如果它是一个表中的主键,它应该是另一个表中的外键。你能更详细地解释一下你想要做什么吗?
【讨论】:
只要您明确地转换数据以使比较最终以等效的数据类型完成,您应该没问题。
根据您的描述,您需要在进行比较之前将 int 数据类型转换为 varchar。如果在您的数据库上设置了大写,请注意修剪空白并注意。还有 - int 比较比 varchar 比较快。
【讨论】: