2010-07-04 14 views
5

Tôi có một ứng dụng web PHP với các bảng MySQL dùng văn bản utf8. Gần đây tôi đã chuyển đổi dữ liệu từ latin1 thành utf8 cùng với các bảng và cột tương ứng. Tôi đã làm, tuy nhiên, quên sử dụng mysql_set_charset và dữ liệu mới nhất đến tôi sẽ giả định đến thông qua kết nối MySQL như latin1. Tôi không biết điều gì sẽ xảy ra khi latin1 đến một cột utf8, nhưng nó gây ra một số vấn đề hiển thị lạ cho các mục như dấu phẩy, dấu ngoặc kép, dấu và, v.v.chèn văn bản latin1-mã hóa vào các bảng utf8 (quên sử dụng mysql_set_charset)

Bây giờ mysql_set_charset được đặt đúng vị trí, nó sẽ lấy dữ liệu với các nhân vật sôi nổi. Bất kỳ cách nào để chuyển đổi súp latin1-utf8 sang thẳng utf8 bây giờ tôi có tài nguyên kết nối cơ sở dữ liệu bằng cách sử dụng bộ ký tự chính xác?

+0

Quá lười để kiểm tra và bán nó làm câu trả lời của tôi .. http://www.mysqlperformanceblog.com/2007/12/18/fixing-column-encoding-mess-in-mysql/ sẽ giúp bạn (một số ý kiến ​​tốt đẹp có quá). Nếu có thể chỉ nhận được các hàng được chèn/cập nhật trong khoảng thời gian set_charset() bị thiếu, bạn thậm chí có thể chuyển đổi các hàng này một cách thiết thực mà không kiểm tra bất kỳ thứ gì. – Kuchen

Trả lời

4

Tìm thấy bản sửa lỗi bằng nhận xét của bạn. Đây là dòng SQL dường như đã giải quyết được vấn đề của tôi.

UPDATE table SET col = CONVERT(CONVERT(CONVERT(col USING latin1) USING binary) using utf8); 

Mặc dù cột là UTF8, nó buộc nó lấy dữ liệu ra là latin1, chuyển đổi thành nhị phân, chuyển đổi thành utf8 và chèn lại.

+0

sao chép bảng trước khi sử dụng, hwo biết –