[mysql] 열 이름으로 사용 된 예약어를 어떻게 이스케이프합니까? MySQL / 테이블 생성
.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;
답변
ANSI SQL 모드 가 활성화 된 경우 큰 따옴표를 사용할 수 있습니다
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;
그렇지 않으면 독점적 인 백 진드기 탈출. ( `
다양한 키보드 레이아웃 에서 문자 를 찾는 위치는 이 답변 에서 다룹니다. )
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;
(출처 : MySQL 참조 매뉴얼, 9.3 예약어 )
답변
백틱 문자 (`)를 사용해야합니다. 예 :
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;
답변
다른 SQL Server 간의 이식성에 관심이있는 경우 ANSI SQL 쿼리를 사용해야합니다. ANSI SQL에서 문자열 이스케이프 처리는 큰 따옴표 ( “)를 사용하여 수행됩니다. 불행하게도이 이스케이프 방법은 ANSI 호환 모드로 설정되어 있지 않으면 MySQL로 이식 할 수 없습니다.
개인적으로, 나는 항상 –sql-mode = ‘ANSI’인수로 MySQL 서버를 시작합니다. 설정되지 않았거나 자신이 제어하는 MySQL 서버에서 실행될 쿼리를 작성하는 경우 다음을 수행 할 수 있습니다.
- ANSI SQL로 모든 SQL 쿼리 작성
-
다음과 같은 MySQL 특정 쿼리로 묶습니다.
SET @OLD_SQL_MODE=@@SQL_MODE; SET SESSION SQL_MODE='ANSI'; -- ANSI SQL queries SET SESSION SQL_MODE=@OLD_SQL_MODE;
이런 식으로 MySQL 전용 쿼리는 .sql 스크립트의 시작과 끝에 있습니다. 다른 서버용으로 배송 할 경우이 3 가지 쿼리를 제거하면됩니다. 더욱 편리하게 위의 모드 설정 쿼리를 포함하는 script_mysql.sql이라는 스크립트를 작성하고 script_ansi.sql 스크립트를 소싱하고 모드를 재설정 할 수 있습니다.