我通过 MySQL 查询浏览器 1.2.14 与 MySQL 服务器版本 5.0.45 通信
具有binary(6)类型的列。
CREATE TABLE `test` (
`tid` int(10) unsigned NOT NULL auto_increment,
`h` binary(6) NOT NULL,
PRIMARY KEY (`tid`),
KEY `idx1` (`h`)
) ENGINE=MyISAM;
查询后
INSERT INTO test(h) VALUES(X'AABBCCDDEEFF');
我在添加行的 h 字段中看到损坏的值,例如
D0 84 C2 BB D0 9C
似乎mysql将二进制值视为字符串并根据某种字符集存储它。但是为什么它会忽略要插入的值的二进制列类型和X'...'符号? 是我做错了还是MySQL错了?
最佳答案
您是否尝试使用 HEX()
?
SELECT HEX(h) FROM test;
会给你:
| HEX(H) | |--------------| | AABBCCDDEEFF |
Now if you want to treat a hexadecimal value as a number you need to use CAST(h AS UNSIGNED)
.
SELECT CAST(X'AABBCCDDEEFF' AS UNSIGNED);
输出:
| CAST(X'AABBCCDDEEFF' AS UNSIGNED) | |-----------------------------------| | 187723572702975 |
默认情况下,十六进制值被视为字符串,根据您选择的数据类型判断,它很可能正是您想要的。只是输出吓跑了你。
进一步阅读
关于MySQL 插入二进制列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893218/