将 TINYINT(1) 转换为字符串
Posted
技术标签:
【中文标题】将 TINYINT(1) 转换为字符串【英文标题】:Converting TINYINT(1) to a string 【发布时间】:2014-06-17 01:08:51 【问题描述】:我想将TINYINT(1)
值转换为字符串。
假设如果订阅支付等于 1(或真),那么当我从 mysql 数据库中检索值到我的 .php
文件时,结果将是“是”。
如果订阅paid = 0
(或false),结果将为“否”。
有没有办法将TINYINT(1)
值转换为包含我选择的单词的字符串?
很抱歉,如果我是间接的或需要有关此问题的更多信息
【问题讨论】:
有,但何必呢?值达到PHP后才转换,更简单,更经济,不会导致你把部分业务逻辑放到SQL查询中(不利于维护)。 【参考方案1】:鉴于 MySQL 没有提供任何体面的机制来防止将 -1
或 33
插入到 TINYINT
列中,我将简单地针对零/非零进行测试:
SELECT CASE
WHEN paid<>0 THEN 'Yes'
WHEN paid=0 THEN 'No'
ELSE 'Unknown'
END is_paid
FROM suscription
这个问题也被标记为PHP。我认为尽可能使用原生类型更简洁:
if (is_null($row['paid'])
$paid = null;
else
$paid = $row['paid']!=0;
在显示时获取正确的字符串应该很简单。
【讨论】:
看来,paid=0 THEN 'Yes'
应该是 paid=0 THEN 'No'
,反之亦然。
谢谢。出于某种奇怪的弗洛伊德式原因,我总是反其道而行之。【参考方案2】:
您可以使用IF
:
SELECT IF(`column` = 1, 'yes', 'no') FROM `table_name`
或者:
SELECT IF(`column` = 0, 'no', 'yes') FROM `table_name`
或者你可以根据数据使用<
或>
等。
【讨论】:
【参考方案3】:您可以在 PHP 中执行此操作:
$number = 1; // or 0 - basically your MySQL variable
$word = $number ? "yes" : "no";
或者,在您的 MySQL 查询中执行此操作:
SELECT IF(`column_name` = 1, 'yes', 'no') FROM ...
【讨论】:
以上是关于将 TINYINT(1) 转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Postgresql 布尔值转换为 MySQL Tinyint?