2010-01-05 24 views

Trả lời

59

Trên Unix, tên bảng phân biệt chữ hoa chữ thường. Trên Windows, chúng không có. Vui, phải không? Kinda giống như hệ thống tập tin tương ứng của họ. Bạn có nghĩ rằng đó là một sự trùng hợp ngẫu nhiên?

Nói cách khác, nếu bạn đang có kế hoạch triển khai trên máy Linux, hãy kiểm tra tốt hơn SQL của bạn dựa trên MySQL dựa trên Linux hoặc chuẩn bị cho các lỗi "không tìm thấy bảng" bí ẩn tại thời điểm prod. VM có giá rẻ trong những ngày này.

Tên trường phân biệt chữ hoa chữ thường bất kể.

EDIT: chúng tôi đang nói về hệ điều hành trên máy chủ máy chủ của MySQL, không phải máy khách.

+1

Từ tài liệu MySQL: Mặc dù tên cơ sở dữ liệu và bảng không phân biệt chữ hoa chữ thường trên một số nền tảng, bạn không nên tham khảo cơ sở dữ liệu hoặc bảng đã cho bằng các trường hợp khác nhau trong cùng một câu lệnh.Câu lệnh sau sẽ không hoạt động vì nó đề cập đến một bảng cả my_table và như MY_TABLE: 'SELECT * FROM my_table WHERE MY_TABLE.col = 1;', rất đúng, nhưng nên được coi là phân biệt chữ hoa chữ thường trong mọi trường hợp ... –

+4

Nó không dựa trên loại bảng –

+11

Mọi bảng (*** bất kể công cụ nào ***) có tệp '.frm' tương ứng lưu trữ cấu trúc dữ liệu. Vì tên của bảng và tệp giống nhau, nên độ nhạy của bảng phụ thuộc hoàn toàn vào độ nhạy của hệ thống tệp trên máy chủ. – Cucu

-5

Không, tên bảng và hàng không phân biệt chữ hoa chữ thường và thậm chí cả các câu lệnh SQL thì không. Vì vậy, các tên mà bạn đưa ra làm ví dụ giống hệt nhau
Chỉnh sửa: Nó phụ thuộc vào collation máy chủ. Vì vậy, bạn phải kiểm tra các thiết lập. Không liên quan đến hệ điều hành.

+0

Không chính xác - Seva Alekseyev có quyền. –

+0

Xin lỗi, tôi đã gặp trực tiếp điều này. Có những vết sẹo tinh thần để chứng minh. –

3

Bạn có thể tìm thấy this cần thiết để đọc. Có thể thiết lập độ nhạy trường hợp trong MySQL nhưng nó thực sự chỉ là một vấn đề khi bạn làm việc trong nhiều môi trường.

+0

Có, tôi đã sử dụng lower_case_table_names = 1 trên Linux. Nó hoạt động, nhưng chỉ cho các bảng bạn tạo sau khi áp dụng cài đặt này. –

+0

Tóm lại: thêm một dòng 'lower_case_table_names = 1' dưới' [mysqld] 'trong' my.cnf'. – Shautieh

11

Từ MySQL documentation:

cơ sở dữ liệu và bảng tên không phân nhạy cảm trong Windows, và trường hợp nhạy cảm trong hầu hết các giống Unix. Một ngoại lệ đáng chú ý là Mac OS X, dựa trên Unix nhưng sử dụng loại hệ thống tệp mặc định (HFS +) mà không phân biệt chữ hoa chữ thường.

cột và chỉ số tên không phân nhạy cảm trên nền tảng nào, cũng không phải là bí danh cột.

2

Kỳ lạ là đủ dường như là để phân biệt chữ hoa chữ thường trong bàn làm việc MySQL ngay cả trên Windows.

Chúng tôi chỉ cố gắng thay đổi kết quả của câu lệnh SELECT nhưng Workbench không cho phép chúng tôi, phàn nàn rằng truy vấn của chúng tôi không bao gồm khóa chính của bảng (mà nó đã làm nhưng trong trường hợp thấp hơn). -chỉ có. Chạy cùng một truy vấn với khóa chính trong trường hợp thích hợp (ID thay vì id) sẽ cho phép chúng tôi chỉnh sửa kết quả như mong đợi.

Các vấn đề liên quan