首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中两列的哈希

问mysql中两列的哈希
EN

Stack Overflow用户
提问于 2016-08-03 07:45:25
回答 3查看 10K关注 0票数 5

我有一个MYSQL表,其中有5列:

代码语言:javascript
复制
id bigint
name varchar
description varchar
slug

我能让MySQL自动生成name+description的256位散列形式的slug的值吗?

在保存之前,我现在使用PHP生成slug的SHA256值。

编辑:

所谓自动,我的意思是看看是否可以将slug字段的默认值更改为计算字段,即name+description的sha256。

我已经知道如何在insert操作中创建它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-03 08:20:50

MySQL 5.7支持generated columns,因此您可以定义一个表达式,并且它将为您插入或更新的每一行自动更新。

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS MyTable (
  id int NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  description varchar(50) NOT NULL,
  slug varchar(64) AS (SHA2(CONCAT(name, description), 256)) STORED NOT NULL,
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

如果您使用的是较早版本的MySQL,则可以使用TRIGGERs执行此操作

代码语言:javascript
复制
CREATE TRIGGER MySlugIns BEFORE INSERT ON MyTable
FOR EACH ROW SET slug = SHA2(CONCAT(name, description));

CREATE TRIGGER MySlugUpd BEFORE UPDATE ON MyTable
FOR EACH ROW SET slug = SHA2(CONCAT(name, description), 256);
票数 11
EN

Stack Overflow用户

发布于 2019-05-21 12:35:37

注意,如果输入中的任何一列为NULL,则concat将返回NULL。因此,要以空安全的方式进行散列,请使用concat_ws。例如:

代码语言:javascript
复制
select md5(concat_ws('', col_1, .. , col_n));
票数 7
EN

Stack Overflow用户

发布于 2016-08-03 08:04:41

使用MySQL的CONCAT()合并这两个值,并使用SHA2()生成256bit的哈希值。

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `description` varchar(50) NOT NULL,
  `slug` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `mytable` (`name`,`description`,`slug`)
     VALUES ('Fred','A Person',SHA2(CONCAT(`name`,`description`),256));

SELECT * FROM `mytable`

输出:

代码语言:javascript
复制
COLUMN        VALUE
id            1
name          Fred
description   A Person
slug          ea76b5b09b0e004781b569f88fc8434fe25ae3ad17807904cfb975a3be71bd89

在SQLfiddle上试试吧。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38732185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档