如何对MySQL中的tinyint列进行文本搜索?

时间:2014-03-13 23:46:44

标签: mysql sql

我有一个包含tinyint列的表格。我的应用程序级别有一个变换器,它将显示整数的文本表示,但现在我希望能够针对该列搜索Text而不添加另一列来保存整数的文本表示。我尝试了CASE,但在where子句中不允许这样做。

是否可以使用某种魔法搜索tinyint,好像它是varchar一样?

1 个答案:

答案 0 :(得分:1)

而不是CASE子句中的WHERE,您可以使用输入文本和字符串构造逻辑AND条件,使条件与其TINYINT值匹配文字。您的应用程序代码必须在每种情况下提供<input_text>的值。

WHERE
  (<input_text> = 'ZERO' AND column_value = 0)
  OR (<input_text> = 'ONE' AND column_value = 1)
  OR (<input_text> = 'TWO' AND column_value = 2)

如果输入文本与字符串文字匹配,则将评估与整数匹配的其余条件。显然,<input_text>只能精确匹配零个或一个文字文本字符串。

由于TINYINT支持255个值的范围,因此显然会很快变得难以处理。您可以考虑将TINYINT列更改为ENUM type

ALTER TABLE your_table MODIFY column_name ENUM('ONE','TWO','THREE',....)

也许比其中任何一个更好的选项(如果不能使用ENUM)是在应用程序代码中创建映射字符串的数据结构,并在执行查找后将整数值传递给SQL查询应用程序代码中相应的字符串值。

最后,RDBMS中的类似选项当然是创建另一个表,将int值映射到字符串并对其执行JOIN。