Chuẩn SQL để thoát tên cột?


96

Có tiêu chuẩn SQL nào để thoát khỏi tên cột không? Nếu không, những gì hoạt động cho mysql và sqlite? nó cũng hoạt động cho sqlserver?

sql 

Câu trả lời:


88

Dấu ngoặc kép "

Các SQL: 1999 tiêu chuẩn quy định cụ thể rằng kép ( ") ( BÁO GIÁ MARK ) được sử dụng để phân định.

<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>

Oracle, PostgreSQL, MySQL, MSSQL và SQlite đều hỗ trợ " làm dấu phân tách định danh.

Không phải tất cả chúng đều sử dụng "làm 'mặc định'. Ví dụ: bạn phải chạy MySQL ở chế độ ANSI và SQL Server chỉ hỗ trợ nó khi QUOTED_IDENTIFIERON.


76

Theo SQLite ,

  • 'foo' là một chuỗi SQL
  • "foo" là một định danh SQL (cột / bảng / v.v.)
  • [foo] là một định danh trong MS SQL
  • `foo` là một định danh trong MySQL

Đối với tên đủ điều kiện, cú pháp là: "t"."foo"hoặc [t].[foo], v.v.

MySQL hỗ trợ tiêu chuẩn "foo" khi ANSI_QUOTEStùy chọn được bật.


3
Lưu ý rằng SQLite cho phép 'foo'được hiểu là một số nhận dạng nếu ngữ cảnh không cho phép một chuỗi và "foo"được hiểu là một chuỗi nếu ngữ cảnh không cho phép một số nhận dạng, mặc dù có một lưu ý rằng hành vi này có thể bị xóa trong tương lai các phiên bản.
thomasrutter

Vì vậy, làm thế nào để bạn làm "t". *?
Loenix

2
@thomasrutter Vâng, tôi hoàn toàn bị hành vi này cắn ... Cố gắng sử dụng WHERE "nonexistent_column" = 0và sqlite chỉ vui vẻ thực hiện nó giả vờ rằng của tôi "nonexistent_column"là một chuỗi. Hoàn toàn đủ điều kiện cho cái tên là "my_table"."nonexistent_column"buộc sqlite phải hành xử nghiêm ngặt hơn.
Rufflewind

foo, "foo"'foo'không làm việc cho tôi với MySQL. Nó yêu cầu dấu nền. Và để làm cho vấn đề tồi tệ hơn, MySQL đã cung cấp các thông báo lỗi vô ích .
jww 17/02/19

22

Đối với MySQL, hãy sử dụng dấu tích quay lại `.

Ví dụ:

SELECT `column`, `column2` FROM `table`

19

Để sử dụng MS SQL [và]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]

2
bạn có thể có khoảng trắng trong tên cột với ms sql!?!

3
bạn có thể! Tuy nhiên, tôi sẽ không.
JMP

1
Có, bạn có thể có khoảng trắng hoặc từ dành riêng làm tên thực thể trong MSSQL. Bạn chỉ cần [] họ.
BoltBait

6
BTW, nếu bạn đang sử dụng [và] trong MS SQL Server và bạn muốn sử dụng ký tự] trong tên của chính nó (vì bất kỳ lý do gì) thì bạn cần phải thoát nó bằng một ký tự] khác (tức là sử dụng]] thay vì] ).
Daniel James Bryars,

2

Để sử dụng DBASE / DBF []

SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]

1

Kết hợp một số câu trả lời với nhau:

MS SQL (hay còn gọi là T-SQL), Microsoft Access SQL, DBASE / DBF: SELECT [COLUMN], [COLUMN2] FROM [TABLE]

MySQL: SELECT `COLUMN`, `COLUMN2` FROM `TABLE`

SQLite, Oracle, Postgresql: SELECT "COLUMN", "COLUMN2" FROM "TABLE"

Vui lòng thêm / chỉnh sửa!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.