0

我有一个具有以下架构的表

CREATE TABLE `foo` (
  `myfield` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我定义了几个变量如下

SET @NAME := 'Somename';
SET @AGE := '31';

我需要在表中插入一个由这些用户定义的变量和常量标记的串联组成的条目。我尝试了以下查询

INSERT INTO `foo` (`myfield`) VALUES
('Name: ' + @NAME + ' Age: ' + @AGE);

语句执行成功,但插入后myfield等于:

31

就像插入值的第一部分被忽略一样。我错过了什么?

4

2 回答 2

1

这就是你应该如何处理这种数据:

  1. 你不希望你明年的年龄一样,所以你存储出生日期
  2. 插入时,每个字段存储一个信息
  3. 在输出上SELECTCONCAT想要什么。

所以 :

CREATE TABLE `foo` (
    `NAME` text NOT NULL,
    `BIRTH` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `foo` (`NAME`, `BIRTH`)
VALUES (@NAME, @BIRTH);


SELECT CONCAT(
    'Name: ',
    `foo`.`NAME`,
    ' Age: ',
     TIMESTAMPDIFF(YEAR,`foo`.`BIRTH`,CURDATE())
     )
FROM `foo`
于 2017-11-12T12:51:03.877 回答
1

第一的。阅读有关数据库规范化的信息。您希望存储姓名和年龄的方式是对 SQL 的严重误用。如果你以这种方式编写的应用程序传递给其他程序员,他们会诅咒你的名字到第 100 代。严重地。

第二。+MySQL 中的运算符进行加法运算。如果你这样做'any string' + 42,会发生两件事:

  1. MySQL 看到它正在添加数字并强制'any string'一个数字:然后数字为零。
  2. 它将 0 添加到 42。

你想用CONCAT('Name: ', @NAME, ' Age: ', @AGE)

于 2017-11-12T11:59:32.510 回答