Đây là câu trả lời hai trong một.
Bạn có thể đặt điều này trong DSN hoặc MYSQL_ATTR_INIT_COMMAND (tùy chọn kết nối).
Tôi nghĩ DSN tốt hơn.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Nếu bạn chỉ định UTF-8
bạn đang làm việc với đối chiếu mặc định của utf8_general_ci
, trừ khi bảng hoặc trường db của bạn sử dụng thứ gì đó khác.
Nếu bạn muốn toàn bộ máy chủ phản hồi với đối chiếu mặc định này thì hãy sử dụng chỉ thị cấu hình:
collation_server=utf8_unicode_ci
character_set_server=utf8
Vì vậy, bạn không phải chỉ định nó trên kết nối mọi lúc.
Các đối chiếu ảnh hưởng đến việc sắp xếp các ký tự và được đặt trên bảng và các trường trong cơ sở dữ liệu của bạn. Các cài đặt này được tôn trọng khi truy vấn bảng. Đảm bảo rằng chúng đã được đặt. Sử dụng tên UTF-8 với đối chiếu được đặt trong db của bạn.
Nhận xét của bạn:
Hãy Trích dẫn từ Hướng dẫn sử dụng MySQL để chứng minh điều này:
Câu trả lời của tôi: Nó hoạt động ngầm, trừ khi các bảng của bạn thay đổi điều này một cách rõ ràng.
Câu hỏi từ bình luận:
Ví dụ:Đối chiếu cột ghi đè đối chiếu bảng
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Nếu cả CHARACTER SET X và COLLATE Y được chỉ định trên một cột, thì bộ ký tự X và đối chiếu Y sẽ được sử dụng. Cột có bộ ký tự utf8
và đối chiếu utf8_unicode_ci
như được chỉ định trong cột bảng, trong khi bảng ở dạng latin1 + latin1_bin.
Ví dụ:nói chung, đối chiếu bảng được sử dụng
Nếu đối chiếu không được chỉ định rõ ràng trên một cột / Trường, thì đối chiếu bảng sẽ được sử dụng:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 có đối chiếu latin1_bin.
Nếu bạn muốn utf8_unicode_ci
đối chiếu, đặt nó vào bảng của bạn nói chung hoặc các cột / trường.