mysql - 将列的默认显示设置为十六进制格式

标签 mysql sql formatting hex mariadb

我正在寻找创建 MySQL 列的方法,其中 SELECT 语句将自动显示任何十六进制格式的值:

1  -> 0x1
16 -> 0x10

这是一个基本上实现了此结果的示例,但问题是该数据的任何用户都必须进行处理( http://sqlfiddle.com/#!9/3bc633/2 ):

创建数据:

CREATE TABLE t1 (
  c1 int
);

INSERT INTO t1 (c1) VALUES
  (0x1),
  (0x10);

选择数据:

SELECT c1, CONCAT('0x', HEX(c1))
FROM t1;

我想在列或表上设置一个属性,以通过简单的 SELECT c1 实现此结果。

最佳答案

CREATE TABLE t1 (
  c1 int,
  c2 varchar(32) GENERATED ALWAYS AS (CONCAT('0x', HEX(c1)))
);

MariaDB [test]> INSERT INTO t1 (c1) VALUES
    ->   (0x1),
    ->   (0x10);
Query OK, 2 rows affected (0.14 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from t1;
+------+------+
| c1   | c2   |
+------+------+
|    1 | 0x1  |
|   16 | 0x10 |
+------+------+
2 rows in set (0.00 sec)

或者,如果您使用旧版本,它可能会是

CREATE TABLE t1 (
  c1 int,
  c2 varchar(32) AS (CONCAT('0x', HEX(c1))) VIRTUAL
);

但同样的原则也适用。

关于mysql - 将列的默认显示设置为十六进制格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48128426/

相关文章:

mysql - Python Flask 将数据插入 MySQL

php - 在 MySQL 中创建联系人的历史日志

sql - Access INSERT INTO SQL 错误

sql - 将SQL重写为JOINS而不是子查询

mysql - SQL 按日期时间分组

c# - 如何可视化各种 DateTime 格式的显示方式?

java - 除非需要,如何使用 DecimalFormat 不显示小数位

php - 向具有 auto_increment 列的表中插入一行

MySQL - 从时间距离为5分钟的2个表中获取行,并将它们放入新表中

html - 如何让 <p> 标签中的两个元素在右侧对齐?