MySQL 插入二进制列

标签 mysql

我通过 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/

相关文章:

php - ajax 调用创建临时表的 php 文件

php - yii 多列外键关系

php - 确定主键编号的标准方法是什么?

mysql - 首先 Group By 按顺序检索所有行?

mysql - 使用 `DISTINCT`关键字时出错?

mysql - Typeorm groupBy 按 orderBy 另一列获取最后一行

mysql - 使用 drupal 设置关系数据库

mysql - 为什么选择 json 数据在 mariadb 中不起作用?

mysql - 带有表连接的 Ruby on Rails 模型

php - 在 MEDIUMTEXT 上使用 MySQL 进行全词搜索