切换数据库mysql中的所有二进制值
Posted
技术标签:
【中文标题】切换数据库mysql中的所有二进制值【英文标题】:switch all binary values in database mysql 【发布时间】:2014-05-12 22:04:55 【问题描述】:我的任务是为具有相对较大的 mysql 数据库(不是那么大但太大而无法手动完成)的网站进行“2.0”重写。
我目前正在经历重新组织和规范化数据库的过程,这是在没有太多计划的情况下即时构思的。
一个更明显的问题是,由于某种原因,数据库中的所有二进制值都被切换到所有 50 个表中 0 为真,1 为假的位置。我觉得这是未来数据和代码中的错误和混乱的秘诀。
有什么方法可以通过 sql / phpmyadmin 跨数据库将其改回正常状态?
【问题讨论】:
有这个“问题”的列数是否有限?并且所有列(微小)都是 int 吗? 大约有 60-70 列可以做到这一点。它们都是 tinyint。 【参考方案1】:按位异或^
:
UPDATE table_name SET column_name = (column_name ^ 1)
【讨论】:
嗨!这很好用,但我不确定发生了什么。你介意再解释一下吗? @synapseradio 他正在使用按位运算符(php.net/manual/en/language.operators.bitwise.php)。但你也可以做一些其他有趣的数学。例如column_name = (column_name-1)*-1
。或column_name = pow(0,column_name)
【参考方案2】:
如果存在此问题的列数有限,并且所有这些列都是数字或文本且仅包含值 0 或 1,则可以执行此 PER 存在问题的列:
update myTable set myColumn = '2' where myColumn = '1';
update myTable set myColumn = '1' where myColumn = '0';
update myTable set myColumn = '0' where myColumn = '2';
如果列是枚举,您将需要另一种方法。 (一个很好的解决方法是使用null
或空字符串而不是2
,但只有当该列不为空时才能这样做。)
编辑
可以做得更简单,列的类型是什么都无所谓。
如果你不期望空值:
update myTable set myColumn = if(myColumn='1','0','1');
如果空值应该保持空值:
update myTable set myColumn = if(myColumn is null, null, if(myColumn='1','0','1'));
如果空值应该变成 1:
update myTable set myColumn = if(myColumn is null, '1', if(myColumn='1','0','1'));
【讨论】:
谢谢谢谢!第二个效果很好,而且足够简洁,做 70 次不会花我太长时间。以上是关于切换数据库mysql中的所有二进制值的主要内容,如果未能解决你的问题,请参考以下文章