mysql - MySQL BIT 类型 SET 使用引号
问题描述
我有这个查询
UPDATE myTable SET f='MYVALUE' WHERE id=1
在其中我只能修改MYVALUE,没有别的。
现在,如果f
是这些类型中的任何一种:
INT
SMALLINT
MEDIUMINT
BIGINT
TINYTEXT
TEXT
MEDIUMTEXT
BIGTEXT
ENUM('0','1')
SET('0','1')
TIME
YEAR
我已经厌倦了写它们但是......你明白了:任何类型,它都有效。
如果f
是 type BIT
,不管有多少位,那么不,它不让我。我希望能够执行以下操作之一:
- 直接设置一个二进制数
f='10111'
:否。 - 设置一个十进制值,希望它能转换它
f='23'
:不。 - 设置一个十六进制值,希望它会转换它
f='0x23'
:不。 - 使用正确的语法(尽管使用了错误的引号)
f='b'10111''
:不。 - 转义引号
f='b\'10111\''
:不。 - 复制引号
f='b''10111'''
:不。
是的,我知道,我可以简单地写f=b'10111'
,但如前所述,我不能删除这些引号。我只能更改那个“值”参数。
有解决方法吗?它适用于任何类型,真的......除了位!
澄清一下:就像我只能使用一个名为 setValue(value) 的函数,而我无法控制内容。比方说 PHP
function setValue($v) {
$sql = "UPDATE myTable SET f='$v' WHERE id=1";
// execute $sql
}
解决方案
使用查询参数。
这是一个使用 MySQL 文本协议预处理语句的演示,但这适用于任何编程语言的预处理语句。
mysql> set @b = b'101';
Query OK, 0 rows affected (0.00 sec)
mysql> prepare s from 'update mytable set f = ? where id = 1';
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute s using @b;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select id, bin(f) from mytable;
+----+--------+
| id | bin(f) |
+----+--------+
| 1 | 101 |
+----+--------+
推荐阅读
- javascript - Getorgchart 中的鼠标悬停事件
- ms-access - MS Access 无效使用 Null(错误 94)
- vba - VBA/VB6 无法识别 VbCrLf
- java - 如何在通过 Helm 部署的 Java Spring Boot 应用程序中使用配置映射中的属性
- c++ - 如何通过 boost 遍历图并提取边权重?
- r - 在 ggplot2 控制图上显示 2 个标准偏差(除了正常的 3 个)
- c++ - 如何识别 LLVM/C++ 中的任何类型的指令?
- machine-learning - 如何在分类中选择正确的类编码方式
- html - 在 html 表中放置一个 php Dropdown
- android - FCM“数据”有效载荷未在一个应用程序中接收,但在另一个应用程序中