10/10/2018, 09:44

PHP và UNICODE UTF-8 trong MySQL 4.1.x – 5.0.x

PHP và UNICODE UTF-8 trong MySQL 4.1.x – 5.0.x
( Sử dụng phpMyAdmin 2.6.x)

Khi chuyển database MySQL từ phiên bản 3.x lên 4.1 trở đi bạn sẽ gặp vấn đề với mã font Unicode, để khắc phục tình trạng này bạn có thể làm theo hướng dẫn sau:

1. Import database vào MySQL 4.1 – 5.0.x:
Khi import file database là dạng mã unicode (File sql của bạn phải chắc chắn là định dạng unicode utf8) vào MySQL 4.1 trở lên trước tiên bạn vào phpMyAdmin tạo database với Collation của Charset là định dạng utf8 chẳng hạn chọn utf8_general_ci sau đó click Create như hình sau:

Sau khi tạo xong bạn click chọn SQL để import database:

Tới đây bạn Browse file database của bạn chú ý muc Character set of the file phải để là utf8 click Go để kết thúc import.
Bây giờ bạn có thể xem tiếng việt thể hiện trong phpMyAdmin đúng theo đinh dạng unicode utf8.

2. Hiển thị unicode utf8 trên web PHP:
Tuy ở trên bạn đã import và hiển thị đúng với định dạng unicode utf8 tuy nhiên khi bạn chay một số ứng dụng web PHP của bạn sẽ vẫn gặp lỗi hiển thị unicode như sau (font unicode bị hiển thị thành dấu ? và ô vuông):

Để khắc phục vấn đề này MySQL cung cấp cho bạn một câu truy vấn SET NAMES 'utf8' , Trong php sau câu truy vấn kết nối database bạn thực hiện thêm một câu truy vấn như đoạn code sau:
Ví dụ:
<?
$dbhost ="localhost";
$dbname ="mediaonline ";
$dbuser ="chilinhnet";
$dbpass ="chilinh";
$db =mysql_connect("$dbhost","$dbuser","$dbpass") or die("Die connect: ".mysql_error());
mysql_select_db("$dbname") or die("Die select database: ".mysql_error());
mysql_query("SET NAMES 'utf8'", $db);
?>
Bây giờ thì bạn hoàn toàn yên tâm với việc thể hiện tiếng việt Unicode utf8 100% trên website PHP:

Chú ý: Đối với một số hosting không cho phép bạn tạo Collation Charset khi tạo database mới từ phpMyAdmin (thường là các phiên bản phpMyAdmin cũ) bạn cũng có thể làm theo cách sau:

Bạn vẫn tạo database và import database bình thường (Mặc định những hosting đó sẽ cấu hình MySQL là Latin1), trong trường hợp có những tùy chọn Chatset bạn cũng phải chọn là Latin1. Lúc này trong phpMyAdmin bạn sẽ không thấy hiển thị tiếng việt Unicode utf8 bởi vì phpMyAdmin đã gắn đoạn code SET NAMES 'utf8', tuy nhiên khi browse web site php của bạn sẽ hiển thị đúng tất nhiên là bạn không được phép sử dụng đoạn code SET NAMES 'utf8' trong mã lên của bạn khi dùng cách import này.

Author:
Lê Chí Linh
ChiLinhNet@yahoo.com
Replika viết 11:54 ngày 10/10/2018
Trùi ui, đúng cái mình mắc phải khi làm cái post tin tức mà mãi ko khắc phục được, cám ơn nhìu..........................
satthuhuydiet viết 11:57 ngày 10/10/2018
Được gửi bởi Replika
Trùi ui, đúng cái mình mắc phải khi làm cái post tin tức mà mãi ko khắc phục được, cám ơn nhìu..........................
Hi MySQL giờ pro lắm rồi, tương lai không kém gì mấy thằng khác đâu, hiện tại những ứng dụng vừa phải thì dùng MySQL là very good, run cực nhanh .
phiên bản 5 trở đi hỗ trợ nhiều tính năng giống MSSQL:
- Store Procedure
- trigger
- views
And more
good good
U.F.O viết 11:50 ngày 10/10/2018
Anh Chí Linh sửa lại câu cú đi nhiều câu em luận mãi chả hiểu gì cả.Nhất là đoạn đầu và doạn cuối ấy !
satthuhuydiet viết 12:00 ngày 10/10/2018
Được gửi bởi U.F.O
Anh Chí Linh sửa lại câu cú đi nhiều câu em luận mãi chả hiểu gì cả.Nhất là đoạn đầu và doạn cuối ấy !
Oh cái này đơn giản thôi, chủ yếu là xem image là được, vô phpMyAdmin là thấy hết.
tet2005 viết 11:57 ngày 10/10/2018
Mình thấy cách này chỉ làm đúng với dữ liệu vốn đã định dạng Collation là utf8_general_ci trước mà thôi.

Host của mình sau khi được HP nâng cấp lên thành MySQL 4.1.11 thì khi mình vào xem vẫn thấy toàn bộ dữ liệu dạng văn bản vẫn để Collation là latin1_swe***xx_ci, mình tiến hành export dữ liệu đó. Sau đó rồi import nó lại theo cách của bạn thì thấy không thành công.

Mình thử tạo lại 1 database khác và chọn Collation là latin1_swe***xx_ci và tiến hành import bình thường, thì thứ nhất không hiển thị đúng unicode trên phpmyadmin và thứ 2 trên website hầu như toàn bộ unicode được hiển thị đúng, có một vài chữ hiện thị sai như Đ thì hiển thị thành L có thêm chấm, ê thì hiển thị thành ô vuông.

Nếu mình tiếp tục viết và gửi bài qua website thì dữ liệu mới đó không bị gì cả, tất cả điều hiển thị unicode đúng.

Ai biết cách khắc phục không? Giúp mình với
satthuhuydiet viết 11:48 ngày 10/10/2018
Được gửi bởi tet2005
Mình thấy cách này chỉ làm đúng với dữ liệu vốn đã định dạng Collation là utf8_general_ci trước mà thôi.

Host của mình sau khi được HP nâng cấp lên thành MySQL 4.1.11 thì khi mình vào xem vẫn thấy toàn bộ dữ liệu dạng văn bản vẫn để Collation là latin1_swe***xx_ci, mình tiến hành export dữ liệu đó. Sau đó rồi import nó lại theo cách của bạn thì thấy không thành công.

Mình thử tạo lại 1 database khác và chọn Collation là latin1_swe***xx_ci và tiến hành import bình thường, thì thứ nhất không hiển thị đúng unicode trên phpmyadmin và thứ 2 trên website hầu như toàn bộ unicode được hiển thị đúng, có một vài chữ hiện thị sai như Đ thì hiển thị thành L có thêm chấm, ê thì hiển thị thành ô vuông.

Nếu mình tiếp tục viết và gửi bài qua website thì dữ liệu mới đó không bị gì cả, tất cả điều hiển thị unicode đúng.

Ai biết cách khắc phục không? Giúp mình với
Chỉ có mấy trường hợp mình đã nêu thôi, bạn nên xem kỹ lại, mình test mọi kiểu rồi ok cả. Trường hợp của ban chắc rơi vào phần Chú ý đó.
Thanh duc viết 11:52 ngày 10/10/2018
Tôi cùng găp phải trường hợp trên
lúc đầu dùng latin1 (mặc định các version trước đều thế hình như mới vẫn vậy) export bằng phpmyadmin ver 2.6.4-pl1 trên host
rồi khi import (dù chọn latin1 hay utf8) đều bị lỗi font chữ ví dụ như chữ Đ
Chưa có giải pháp mong các bạn giúp đỡ . nó kô nằn trong phần chú ý như bạn Linh nói
mathuatvn viết 11:57 ngày 10/10/2018
Tôi cũng bị lỗi như vậy.
Chữ Đ biến thành chữ L có dấu chấm, chữ ê, ơ, ầ thì thành dấu vuông.
Tôi tạo data trên host, mặc định là latin1, nhập dữ liệu bằng php với uft-8, không bị lỗi tiếng Việt.
Khi export data rồi import lại với charater set= utf8 thì bị lỗi như trên.
Rất đáng tiếc vì dữ liệu của tôi trên host là rất lớn. Bây giờ bị lỗi font hết. Chán quá.
Thử nghiệm tương tự với localhost, import, export và hiển thị thì không vấn đề gì.
Xin nhờ cao thủ giúp 1 tay.
Cám ơn nhiều.
satthuhuydiet viết 11:56 ngày 10/10/2018
ở localhost được mà trên host không được thì chỉ khác nhau về version mysql thôi.
Bài liên quan
0