Dữ liệu cột của bạn được lưu trữ bằng cách sử dụng một bộ ký tự. Trong trường hợp này, nó có vẻ là utf8.
Khi bạn thao tác trên các cột đó (ví dụ, thực hiện so sánh bình đẳng hoặc sắp xếp thứ tự), MySQL sử dụng một đối chiếu. Mỗi cột có một đối chiếu mặc định, nó kế thừa từ đối chiếu mặc định của bảng.
Các chỉ mục có đối chiếu mặc định của cột được đưa vào để chúng có thể hoạt động hiệu quả.
Bạn có thể thực hiện một phép so sánh bình đẳng đủ điều kiện bằng cách đối chiếu. Ví dụ:trong JOIN
bạn có thể chỉ định
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
hoặc có lẽ
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Điều đó sẽ loại bỏ sự kết hợp bất hợp pháp của các đối chiếu mà không yêu cầu bạn thay đổi bảng của mình. Điều này có thể giúp bạn tránh thay đổi cơ sở dữ liệu mà bạn đang yêu cầu. Nhưng hãy cẩn thận, sử dụng COLLATE
vòng loại có thể đánh bại việc sử dụng một chỉ mục. Nếu bạn có một bảng lớn và bạn đang dựa vào các chỉ mục để đánh giá hiệu suất, thì điều này có thể không hữu ích.
Vì vậy, điều gì sẽ xảy ra nếu bạn thay đổi bảng của mình để thay đổi đối chiếu mặc định?
- Dữ liệu của bạn sẽ không thay đổi (trừ khi bạn cũng thay đổi bộ ký tự). Điều đó thật tốt.
- Mọi chỉ mục liên quan đến các cột có đối chiếu sẽ được tạo lại.
- Các so sánh và thử thách của bạn có thể thay đổi. Tôi không biết tiếng Thổ Nhĩ Kỳ, vì vậy tôi không thể nói cho bạn biết điều gì có thể xảy ra. Tuy nhiên, ví dụ:trong tiếng Tây Ban Nha, các chữ cái N và Ñ không giống nhau. N đến trước Ñ trong một đối chiếu tiếng Tây Ban Nha, nhưng trong đối chiếu chung, chúng được đối xử như nhau. Có thể có một số khía cạnh của bảng chữ cái Thổ Nhĩ Kỳ hoạt động giống nhau, vì vậy hãy
ORDER BY
của bạn kết quả sẽ không chính xác.
Tuy nhiên, bạn có thể khắc phục điều đó bằng cách chỉ định COLLATE
sửa đổi trong ORDER BY
của bạn mệnh đề.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)