使用MySQL生成SHA-256哈希?

时间:2018-12-04 16:43:16

标签: mysql

这就是我想要做的:

CREATE TABLE IF NOT EXISTS hashes (
  id int NOT NULL AUTO_INCREMENT,
  text varchar(50) NOT NULL,
  hash varchar(64) NOT NULL AS (SHA2(CONCAT(text), 256) STORED,
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

然后我要运行这样的插入:

INSERT INTO `hashes` (`text`) VALUES ('testing');

根据我所做的研究,由于id已启用,因此auto_increment应该是自动生成的,因此我不需要在插入查询中对其进行定义。

根据我的CREATE TABLE查询,应根据在hash字段中输入的数据自动生成text。但是,当我运行CREATE TABLE命令时,出现以下错误:

hash varchar(64) NOT NULL AS (SHA2(CONCAT(text), 256) STORED

我只是希望自动生成hash,类似于CURRENT_TIMESTAMP默认情况下会自动生成当前时间。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

似乎您有语法错误。您应该在NOT NULL哈希函数之后编写SHA2。请尝试:

CREATE TABLE IF NOT EXISTS hashes (
  id int NOT NULL AUTO_INCREMENT,
  text varchar(50) NOT NULL,
  hash varchar(64) AS (SHA2(CONCAT(text), 256)) STORED  NOT NULL ,
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

INSERT INTO `hashes` (`text`) VALUES ('testing');

答案 1 :(得分:0)

您无需将hash列声明为NOT NULL。它基于另一个NOT NULL列text,因此哈希自然也将是NOT NULL。

您还忘记了右括号。

hash varchar(64) AS (SHA2(CONCAT(text), 256)   STORED,
                    1    2      3    3     2 ^     

您需要在我指示^的位置使用另一个结束括号。