Mysql 在表中插入变量和常量标记的串联
我有一个具有以下模式的表Mysql 在表中插入变量和常量标记的串联,mysql,concatenation,sql-insert,user-variables,Mysql,Concatenation,Sql Insert,User Variables,我有一个具有以下模式的表 CREATE TABLE `foo` ( `myfield` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 我定义了几个变量,如下所示 SET @NAME := 'Somename'; SET @AGE := '31'; 我需要在表中插入一个条目,该条目由这些用户定义变量和常量标记的串联组成。我尝试了以下查询 INSERT INTO `foo` (`myfield`) VALUES ('Name: ' +
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
就像插入值的第一部分被忽略一样。我错过了什么?首先。阅读有关数据库规范化的内容。您希望存储姓名和年龄的方式是对SQL的严重误用。如果你将这样编写的应用程序传递给其他程序员,他们将诅咒你的名字直到第千代。真的 第二。MySQL中的
+
操作符执行加法。如果您使用“任意字符串”+42
,则会发生两种情况:
您想先使用
CONCAT('Name:'、@Name、'Age:'、@Age)
。阅读有关数据库规范化的内容。您希望存储姓名和年龄的方式是对SQL的严重误用。如果你将这样编写的应用程序传递给其他程序员,他们将诅咒你的名字直到第千代。真的
第二。MySQL中的+
操作符执行加法。如果您使用“任意字符串”+42
,则会发生两种情况:
您希望使用
CONCAT('Name:'、@Name、'Age:'、@Age)
以下是您应该如何处理此类数据:
上选择youCONCAT
所需内容
您应该如何处理此类数据:
上选择youCONCAT
所需内容
+不是一个mysql字符串连接函数,使用concat动词。这很有效!谢谢@P.salmonth这是如何不在数据库中存储数据。。。请不要这样做…可能重复的+不是一个mysql字符串连接函数使用concat动词。这很有效!谢谢@P.salmonth这是如何不在数据库中存储数据。。。请不要这样做…可能的副本我已经自由编辑您的答案,并添加另一个解释完整的“好方法”。我已经自由编辑您的答案,并添加另一个解释完整的“好方法”。嗨,布拉格,感谢您的回复。年龄只是一个例子。实际情况与您在回答中描述的情况类似,只有常量(不变)值,如姓名或出生。目标只是将查询参数化。谢谢你的解释。嗨,布拉格,谢谢你的回复。年龄只是一个例子。实际情况与您在回答中描述的情况类似,只有常量(不变)值,如姓名或出生。目标只是将查询参数化。谢谢你的解释。
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`