Использование MySQL для генерации хэшей SHA-256? - PullRequest
0 голосов
/ 04 декабря 2018

Вот что я пытаюсь сделать:

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 голосов
/ 04 декабря 2018

Вам не нужно объявлять ваш столбец hash как NOT NULL.Он основан на другом столбце NOT NULL, text, поэтому, естественно, хеш также будет NOT NULL.

Вы также забыли закрывающую скобку.

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

Вам нужно еще одно закрытиеПарен, где я указал ^.

0 голосов
/ 04 декабря 2018

Кажется, у вас есть синтаксическая ошибка.Вы должны написать 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...