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?
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?
Câu trả lời:
"
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_IDENTIFIER
có ON
.
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_QUOTES
tùy chọn được bật.
WHERE "nonexistent_column" = 0
và 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.
foo
, "foo"
Và '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 .
Đối với MySQL, hãy sử dụng dấu tích quay lại `.
Ví dụ:
SELECT `column`, `column2` FROM `table`
Để sử dụng MS SQL [và]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
Để sử dụng DBASE / DBF [
và]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
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!
'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.