2011-03-08 42 views
6

Tôi có DB - với các bài viết trong bảng.Chuyển đổi latin1 thành UTF8

Tôi muốn chuyển đổi tiêu đề và trường nội dung thành utf8 ngay bây giờ - tất cả dữ liệu trông giống như sau: פורטל רעל נפתח רשמית! Tôi muốn nó trở thành ký tự đại diện thông thường.

Cảm ơn

+0

thực hiện với 'phpmyadmin', chuyển đến bảng đó, thay đổi thuộc tính ... đơn giản – diEcho

+0

Đã thử nó rồi, dữ liệu trên pma trông giống như vậy. – WEBProject

+1

Thật khó để nói phải làm gì nếu không có thêm thông tin, nhưng một điều cần lưu ý là việc thay đổi mã hóa ký tự của bảng trong MySQL sẽ không * chuyển đổi dữ liệu sang mã hóa mới. Các byte thực được lưu trữ trong cơ sở dữ liệu vẫn giữ nguyên. –

Trả lời

5

Bạn có thể tạo mysqldump từ cơ sở dữ liệu này. Sau đó tải xuống một cái gì đó như Notepad ++, mở tệp kết xuất, chuyển đổi nó thành UTF8, sau đó thay thế thông qua tệp tất cả các mã hóa thành utf-8 bao gồm toán tử SET NAMES đầu tiên.

Nếu bạn đổ kết xuất tệp qua phpMyAdmin (với cài đặt mặc định), hãy sử dụng tệp đầu ra mã hóa ISO-8859-1 thay vì UTF-8 như bạn có thể thấy theo mặc định.

1

thử

ALTER TABLE `tablename` CHANGE `field_name` `field_name` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL 
8

nếu bạn cần phải chuyển đổi toàn bộ cơ sở dữ liệu, bạn có thể sao lưu nó như databaseback.sql tập tin sau đó hình thành dòng lệnh của bạn iconv -f latain -t utf-8 <databaseback.sql> databaseback.utf8.sql

bạn có thể sử dụng http://www.php.net/manual/en/function.iconv.php
để chuyển đổi mỗi hàng trong php trong trường hợp bạn không có quyền truy cập dòng lệnh

và cuối cùng đừng quên để chuyển đổi collation của từng lĩnh vực trong phpmyadmin, sau đó bạn có thể resotre các utf8 lại dễ dàng

cập nhật

nếu bạn có iconv is not recognized, nó có nghĩa là bạn không đã iconv cài đặt

nhiều giải pháp dễ dàng hơn là: Chuyển MySQL dữ liệu sang Unicode

http://daveyshafik.com/archives/166-migrating-mysql-data-to-unicode.html

+0

Tôi đã thử nó trên CMD - got: 'iconv 'không được nhận dạng dưới dạng tệp hàng loạt hoặc chương trình có thể hoạt động. – WEBProject

4

Bạn có thể viết một tập lệnh php nhỏ thực hiện chuyển đổi. Xem http://www.php.net/manual/en/function.mb-detect-encoding.phphttp://php.net/manual/en/function.mb-convert-encoding.php Đây là cách tôi đã làm điều này.

Và hãy nhớ sử dụng chế độ nghiêm ngặt! http://www.php.net/manual/en/function.mb-detect-encoding.php#102510

Trong mã giả nó sẽ là sth. như thế này:

str = getDataAsString() 
if(!isUTF8(str)) { 
    str = convert2UTF8(str) 
} 
saveStr2DB() 
+0

đã thử nó, tôi nhận được utf-8 khi tôi đang sử dụng detec, vì vậy .. wierd. – WEBProject

+0

chế độ nghiêm ngặt là gì? – WEBProject

+0

xem http://www.php.net/manual/en/function.mb-detect-encoding.php#102510 - Bạn phải đặt tham số cuối cùng thành "true", sau đó nó sẽ tìm ra mã hóa chính xác :) – Tobias

6

sau Chức năng MySQL sẽ trả về chuỗi utf8 chính xác sau khi đúp mã hóa:

CONVERT (CAST (CONVERT (lĩnh vực SỬ DỤNG latin1) AS Binary) SỬ DỤNG utf8) Nó có thể được sử dụng với câu lệnh UPDATE để sửa các trường:

tab UPDATEgame SET field = CONVERT (CAST (CONVERT (trường USING latin1) AS BINARY) SỬ DỤNG utf8);

+1

này cắt ngắn từ trên các ký tự đặc biệt :( –

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