尝试使用会话变量创建表时出现语法错误

时间:2011-08-02 07:37:29

标签: mysql

以下适用于新的MySQL会话:

CREATE DATABASE rand27818;
USE rand27818;
CREATE TABLE sessions (id INT NOT NULL AUTO_INCREMENT, session VARCHAR(128), PRIMARY KEY(id));
DROP DATABASE rand27818;

但是,这个 -

SET @sesslen = 128;
CREATE DATABASE rand27818;
USE rand27818;
CREATE TABLE sessions (id INT NOT NULL AUTO_INCREMENT, session VARCHAR(@sesslen), PRIMARY KEY(id));
DROP DATABASE rand27818;

- 没有;它返回:

  

“ERROR 1064(42000):您的SQL语法有错误;请检查   手册,对应右边的MySQL服务器版本   在'@sesslen'附近使用的语法,PRIMARY KEY(id))'在第1行“

我已经尝试了几个带有额外括号的组合,删除了@符号,在使用数据库之后分配变量等没有快乐。 (不是我认为它会有任何区别。)在INSERT语句和SELECTing变量中使用变量似乎没问题,我只是遇到了尝试创建的问题。

我认为这是我的安装的好奇心(MySQL与XAMPP捆绑在一起,如果有帮助的话)或者由于我对MySQL的概念性误解而遗漏了一些东西。如果是后者,有人可以解释我缺少的东西吗?

2 个答案:

答案 0 :(得分:0)

尝试SET @sesslen := 128;

使用:=和not =

定义mysql值

答案 1 :(得分:0)

您应该使用prepared statements

SET @sesslen = 128;
CREATE DATABASE rand27818;
USE rand27818;

SET @sql = CONCAT('CREATE TABLE sessions (id INT NOT NULL AUTO_INCREMENT, session VARCHAR(', @sesslen, '), PRIMARY KEY(id));');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
...