我正在从.NET中的类生成表,一个问题是一个类可能有一个字段名为key,这是一个保留的MySQL关键字。如何在create table语句中将其转义?(注意:下面的另一个问题是文本必须是固定大小才能被索引/唯一)
create table if not exists misc_info (
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
key TEXT UNIQUE NOT NULL,
value TEXT NOT NULL)ENGINE=INNODB;发布于 2010-05-23 05:47:13
如果启用了ANSI SQL mode,则可以使用双引号
CREATE TABLE IF NOT EXISTS misc_info
(
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
"key" TEXT UNIQUE NOT NULL,
value TEXT NOT NULL
)
ENGINE=INNODB; 或者是专有的反勾号,否则会转义。(在this answer中介绍了在各种键盘布局上查找`字符的位置)
CREATE TABLE IF NOT EXISTS misc_info
(
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
`key` TEXT UNIQUE NOT NULL,
value TEXT NOT NULL
)
ENGINE=INNODB; 发布于 2010-05-23 05:46:49
您应该使用反勾号字符(`),例如:
create table if not exists misc_info (
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
`key` TEXT UNIQUE NOT NULL,
value TEXT NOT NULL)ENGINE=INNODB;发布于 2011-12-29 02:36:13
如果您对不同SQL服务器之间的可移植性感兴趣,则应该使用ANSI SQL查询。ANSI SQL中的字符串转义是通过使用双引号(")来完成的。不幸的是,这种转义方法不能移植到MySQL,除非它被设置为ANSI兼容模式。
就我个人而言,我总是使用--sql- MySQL =‘ANSI’参数启动我的模式服务器,因为这允许两种转义方法。如果您正在编写要在未由您设置/控制的MySQL服务器中执行的查询,则可以执行以下操作:
SET @OLD_SQL_MODE=@@SQL_MODE;SET SESSION SQL_MODE=' ANSI ';-- ANSI SQL查询SET SESSION SQL_MODE=@OLD_SQL_MODE;
这样,在.sql脚本的开头和结尾就只有MySQL特定的查询了。如果你想把它们发送到不同的服务器上,只需删除这3个查询,一切就都准备好了。更方便的是,您可以创建一个名为: script_mysql.sql的脚本,该脚本将包含上述模式设置查询,并生成一个script_ansi.sql脚本并重置模式。
https://stackoverflow.com/questions/2889871
复制相似问题