Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ảnh hưởng của việc cập nhật bảng có các hàng từ utf8_turkish_ci đến utf8_general_ci?

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?

  1. 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.
  2. Mọi chỉ mục liên quan đến các cột có đối chiếu sẽ được tạo lại.
  3. 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 Ñ 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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel và AWS Cloudfront

  2. Kiểm tra tính hợp lệ của kết nối MySQL trong nguồn dữ liệu:CHỌN 1 hay cái gì đó tốt hơn?

  3. Cách bật ENUM trong Symfony 2 / Doctrine

  4. Cách khắc phục Mã trạng thái máy chủ:302 Tìm thấy bởi SQL Inject Me Firefox Addon

  5. Có thể ẩn mật khẩu trong MySQL General / Slow Query Logs không?