2011-01-22 54 views
12

tôi nên đặt cho Collation khi tạo bảng trong MySQL:MySQL Collation: latin1_swedish_ci Vs utf8_general_ci

  • latin1_swedish_ci hoặc utf8_general_ci

Collation là gì không?

Tôi đã sử dụng latin1_swedish_ci, điều đó có gây ra bất kỳ sự cố nào không?

+1

Tìm hiểu xem collation là gì: http://stackoverflow.com/questions/3324900 –

+0

có thể trùng lặp của [Sự khác nhau giữa utf8 và latin1] (http://stackoverflow.com/questions/2708958/differences-between-utf8-and -latin1) –

+0

bản sao có thể có của [Tôi không hiểu Collation? (Mysql, RDBMS, bộ ký tự)] (http://stackoverflow.com/questions/3324900/i-dont-understand-collation-mysql-rdbms-character-sets) – Crozin

Trả lời

3

Bạn có thể đọc về các bộ ký tự và collations như của MySQL 5.5 ở đây:
Character Sets and Collations in General
Character Sets and Collations in MySQL

Sự hỗ trợ collations là cần thiết để hỗ trợ tất cả các nhiều ngôn ngữ bằng văn bản của thế giới. Ví dụ bằng ngôn ngữ của tôi (tiếng Đan Mạch), chúng tôi có một ký tự đặc biệt 'æ'. Nghe có vẻ như Thụy Điển, Đức, Hungary (và nhiều hơn nữa) 'ä'. Nhân vật đó cũng xuất hiện bằng tiếng Đan Mạch với các từ được nhập thành một trong những ngôn ngữ đó. Do sự hỗ trợ đối chiếu, chúng tôi có thể in cả chính xác và được sắp xếp giống nhau (ORDER BY ...) giống hệt nhau. Nếu không có sự hỗ trợ đối chiếu, điều đó là không thể.

collations Thụy Điển là mặc định MySQL cho bộ ký tự latin. Nó hoạt động tốt với tiếng Anh. Tuy nhiên, nếu bạn có một ngôn ngữ khác mà bạn sử dụng thường xuyên (ví dụ tiếng Tây Ban Nha), bạn có thể thay đổi đối chiếu thành tiếng Tây Ban Nha, do đó, việc phân loại các chuỗi tiếng Tây Ban Nha sẽ đúng theo quy tắc ngôn ngữ tiếng Tây Ban Nha.

Một ví dụ rất đặc biệt về đối chiếu là một trong những hình ảnh của Đức. Nó được tạo ra để cho phép phân loại như trong sách điện thoại Đức. Sách điện thoại của Đức không tuân thủ các quy tắc chung của ngôn ngữ Đức!

Bạn có thể tạo collation của riêng mình nếu bạn muốn. Collations có thể được biên dịch hoặc định dạng văn bản.

6

Dù bạn làm gì, đừng cố gắng sử dụng collation swedish_ci mặc định với utf8 (thay vì latin) trong mysql, hoặc bạn sẽ gặp lỗi. Các bản ghép phải được ghép nối với bộ ký tự phù hợp để hoạt động. SQL này sẽ thất bại vì không phù hợp trong charset và collation:

CREATE TABLE IF NOT EXISTS `db`.`events_user_preference` (
    `user_id` INT(10) UNSIGNED NOT NULL , 
    `email` VARCHAR(40) NULL DEFAULT NULL , 
    PRIMARY KEY (`user_id`)) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = latin1_swedish_ci 

Và @Blaisorblade chỉ ra rằng cách để sửa lỗi này là sử dụng bộ ký tự mà đi với collation swedish:

DEFAULT CHARACTER SET = utf8_swedish_ci 

SQL cho mô-đun (lịch) cho khung công tác php Yii có một cái gì đó tương tự như mã sai ở trên. Hy vọng rằng họ đã sửa nó ngay bây giờ.

+2

Lỗi trong mã ở trên là do bạn kết hợp bộ ký tự UTF8 với phép so sánh latin1_ *. Thay vào đó nó nên sử dụng 'utf8_swedish_ci' (http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html). Vì vậy, câu trả lời của bạn chỉ nên nói rằng collations là charset cụ thể, và collations cho một bộ ký tự không thể được kết hợp với một bảng mã. – Blaisorblade

+0

Yea, đó là một cách ngắn gọn hơn để nói điều đó, tôi chỉ muốn trả lời câu hỏi của OP và ngăn không cho họ nhầm lẫn trong mã. Tôi cũng nên cung cấp mã hoạt động. Sẽ thêm của bạn. – hobs

-1

Trong Máy chủ lưu trữ Wamp 2.5, bạn có thể thay đổi đối chiếu bằng cách vào PHPAdmin, chọn cơ sở dữ liệu bạn cần thay đổi. Điều này sẽ cung cấp cho bạn một bộ tab khác. Chọn Tab được gọi là Hoạt động. Trong tab đó sẽ là phần được gọi là collation, chọn một trong những bạn muốn trong trình đơn thả xuống và chọn đi.

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