Giải pháp hiệu quả tăng Traffic cho website
Traffic Exchange Site
Hiển thị các bài đăng có nhãn php. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn php. Hiển thị tất cả bài đăng

cá thẻ Ví dụ tag form HTML5

By
( Khởi nghiệp với Internet)

INPUT

Input dạng color (mới)

<input type="color" name="" />
Trình duyệt hiển thị dạng bảng màu, giúp cho việc lựa chọn màu thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input dạng date (mới)

<input type="date" name="" />
Trình duyệt hiển thị dạng bảng ngày tháng, giúp cho việc lựa chọn ngày tháng thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input dạng datetime (mới)

<input type="datetime" name="" />
Trình duyệt hiển thị dạng ngày tháng, giúp cho việc lựa chọn ngày tháng thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input dạng datetime-local (mới)

<input type="datetime-local" name="" />
Trình duyệt hiển thị dạng ngày tháng theo vùng, giúp cho việc lựa chọn ngày tháng theo vùng thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input dạng email (mới)

<input type="email" name="" />
Dạng email giúp cho trình duyệt hiểu đúng dạng nhập vào là email, dạng này được hỗ trợ đa số các trình duyệt.

Input dạng month (mới)

<input type="email" name="" />
Trình duyệt hiển thị dạng tháng, giúp cho việc lựa chọn tháng thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input dạng number (mới)

<input type="number" name="" min="3" max="10" step="" />
thuộc tính min, max và step không bắt buộc.
Trình duyệt hiển thị dạng số, giúp cho việc xác định số thuận tiện và chính xác hơn.
Dạng number được hỗ trợ phần lớn các trình duyệt, click xem trình duyệt hỗ trợ.

Input dạng range (mới)

<input type="range" name="" min="3" max="10" step="" />
thuộc tính min, max và step cần phải có.
Trình duyệt hiển thị dạng dãy số, giúp cho việc xác định số thuận tiện và chính xác hơn.
Dạng range được hỗ trợ phần lớn các trình duyệt, click xem trình duyệt hỗ trợ.

Input dạng search (mới)

<input type="search" name="" />
thuộc tính min, max và step cần phải có.
Giúp cho trình duyệt hiểu trường nhập vào được sử dụng cho truy vấn tìm kiếm.
Dạng range được hỗ trợ trong đa số các trình duyệt, click xem trình duyệt hỗ trợ.

Input dạng tell (mới)

<input type="tell" name="" />
Giúp cho trình duyệt hiểu trường nhập vào có kiểu số điện thoại.
Dạng tell được hỗ trợ trong đa số các trình duyệt, click xem trình duyệt hỗ trợ.

Input dạng time (mới)

<input type="time" name="" />
Trình duyệt hiển thị dạng thời gian, giúp cho việc lựa chọn thời gian thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input dạng url (mới)

<input type="url" name="" />
Giúp cho trình duyệt hiểu trường nhập vào có kiểu là một url.
Dạng url được hỗ trợ trong đa số các trình duyệt, click xem trình duyệt hỗ trợ.

Input dạng week (mới)

<input type="week" name="" />
Trình duyệt hiển thị dạng tuần, giúp cho việc lựa chọn các tuần thuận tiện và chính xác hơn.
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input với thuộc tính max (mới)

<input type="number" name="" max="10" />
<input type="date" name="" max="2012-12-31" />
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input với thuộc tính min (mới)

<input type="number" name="" min="5" />
<input type="date" name="" min="1970-01-01" />
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input kết hợp 2 thuộc tính min và max (mới)

<input type="number" name="" min="5" min="10" />
<input type="date" name="" min="1970-01-01" min="2012-12-31" />
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input với thuộc tính placeholder (mới)

<input type="text" name="" placeholder="Click vào đây để xem kết quả" />

Input với thuộc tính required (mới)

<form action="confirm.php">
<input type="text" name="" required="required" /><input type="submit" name="" />
</form>

Input với thuộc tính step (mới)

<input type="number" name="" step="5" />
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.

Input kết hợp với tag <datalist> (mới)

Xác định giá trị các thành phần <input /> có thể có (tương tự như <select> - <option>).
<input list="html" />
<datalist id="html">
<option value="Học HTML"></option>
<option value="Tham khảo HTML"></option>
<option value="Ví dụ HTML"></option>
<option value="Thực hành HTML"></option>
</datalist>
Hiện nay chỉ có một số ít trình duyệt hỗ trợ, click xem trình duyệt hỗ trợ.
Double click vô input để xem kết quả.

Input dạng text

<input type="text" name="" value="" size="30" />
Sử dụng để nhập giá trị text.

Input dạng text - sử dụng maxlength

<input type="text" name="" value="" size="30" maxlength="20" />
Xác định chiều dài lớn nhất (trong ký tự) của một trường text hay password.

Input dạng text - sử dụng readonly

<input type="text" name="" value="" size="30" readonly="readonly" />
Sử dụng khi giá trị text chỉ dùng để đọc, không được thay đổi.

Input dạng password

<input type="password" name="" value="" size="30" />
Text hiển thị bên trong dưới dạng password.
<input type="password" name="" value="myPasssword" size="30" />

Input dạng hidden

<input type="hidden" name="" value="" size="30" />
Dạng này sẽ không hiển thì ra trình duyệt.
Được sử dụng khi không muốn dữ liệu bị thay đổi.

Input dạng checkbox

<input type="checkbox" name="" value="" />
<input type="checkbox" name="" value="" />
Được sử dụng cho nhiều lựa chọn khác nhau.

Input dạng checkbox - sử dụng checked

<input type="checkbox" name="" value="" checked="checked" />
<input type="checkbox" name="" value="" />
Được sử dụng cho nhiều lựa chọn khác nhau.

Input dạng checkbox - sử dụng disabled

<input type="checkbox" name="" value="" disabled="disabled" />
<input type="checkbox" name="" value="" />
Dạng này không cho click hay tác động tới input.
Được sử dụng khi không muốn dữ liệu bị thay đổi.

Input dạng radio

<input type="radio" name="checkbox" value="" />
<input type="radio" name="checkbox" value="" />
Được sử dụng cho một chọn lựa duy nhất.
Các <input /> phải cùng "name", nếu không sẽ không chọn được.

Input dạng radio - sử dụng checked

<input type="radio" name="checkbox" value="" checked="checked" />
<input type="radio" name="checkbox" value="" />
Được sử dụng cho một chọn lựa mặc định.

Input dạng radio - sử dụng disabled

<input type="radio" name="checkbox" value="" disabled="disabled" />
<input type="radio" name="checkbox" value="" />
Dạng này không cho click hay tác động tới input.
Được sử dụng khi không muốn dữ liệu bị thay đổi.

Input dạng button

<input type="button" name="" value="Click" />
Sử dụng như một nút nhấn.

Input dạng button reset

<input type="reset" name="" value="Reset" />
Dùng để reset lại giá trị trong <form>.

Input dạng button submit

<input type="submit" name="" value="Submit" />
Dùng để gửi dữ liệu lên server, dữ liệu được gửi thông qua thuộc tính action trong <form>.

Input dạng button image

<input type="image" src="images/btn_submit.jpeg" alt="SUBMIT" name="" />
Sử dụng như một nút nhấn bằng hình.

Input dạng file upload

<input type="file" name="" />
Sử dụng để upload file.

BUTTON

<button type="button">Click me!</button>
<button type="button" disabled="disabled">Disabled</button>
<button type="button" name="tênButton">Name</button>
<button type="reset">Reset</button>
<button type="submit">Submit</button>
<button type="button" value="Gửi">Value</button>

LABEL

Label - input dạng text

<label for="email">Email</label>: <input type="text" id="email" name="email" size="30" />
Hãy click vào nhãn Email để hiểu rõ hơn.
: 

Label - input dạng checkbox

<label for="label01">Nhãn 01</label>: <input type="checkbox" id="label01" name="label01" value="" /><br />
<label for="label02">Nhãn 02</label>: <input type="checkbox" id="label02" name="label02" value="" />
Hãy click vào nhãn 01 và 02 để hiểu rõ hơn.
: 
: 

Label - input dạng radio

<label for="male">Nam</label>: <input type="radio" id="male" name="sex" value="" />
<br />
<label for="female">Nữ</label>: <input type="radio" id="female" name="sex" value="" />
Hãy click vào nhãn Nam và Nữ để hiểu rõ hơn (chú ý: giá trị của "name" trong 2 <input /> phải như nhau).
: 
: 

TEXTAREA

rows - cols

<textarea rows="5" cols="20">Bạn đang xem tag html textarea, là text có thể nhập được văn bản, và có thể chứa rất nhiều dòng...</textarea>

disabled

<textarea rows="5" cols="20" disabled="disabled">Bạn đang xem tag html textarea, là text có thể nhập được văn bản, và có thể chứa rất nhiều dòng...</textarea>
Dạng này sẽ không hiển thì ra trình duyệt.
Được sử dụng khi không muốn dữ liệu bị thay đổi.

readonly

<textarea rows="5" cols="20" readonly="readonly">Bạn đang xem tag html textarea, là text có thể nhập được văn bản, và có thể chứa rất nhiều dòng...</textarea>
Sử dụng khi giá trị textarea chỉ dùng để đọc, không được thay đổi.

SELECT - OPTION

select - option

<select>
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>

select - sử dụng name

<select name="TenDanhSach">
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>

select - sử dụng disabled

<select disabled="disabled">
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>
Xác định danh sách thả xuống không hiển thị.

select - sử dụng multiple

<select multiple="multiple">
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>
Hiển thị nhiều tùy chọn.

select - sử dụng size

<select size="3">
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>
Xác định số tùy chọn có thể thấy trong danh sách lựa chọn.

option - sử dụng disabled

<select>
<option disabled="disabled">Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>
Xác định danh sách thả xuống không hiển thị.

option - sử dụng label

<select>
<option label="label01">Danh sách 01</option>
<option label="label02">Danh sách 02</option>
<option label="label03">Danh sách 03</option>
<option label="label04">Danh sách 04</option>
</select>
Xác định nhãn cho tùy chon.

option - sử dụng selected

<select> <option>Danh sách 01</option>
<option selected="selected">Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 04</option>
</select>
Xác định một tùy chọn được chọn mặc định.

option - sử dụng value

<select>
<option value="value01">Danh sách 01</option>
<option value="value02">Danh sách 02</option>
<option value="value03">Danh sách 03</option>
<option value="value04">Danh sách 04</option>
</select>
Xác định giá trị của tùy chọn (sẽ được gửi tới server khi submit).

OPTGROUP

optgroup - sử dụng label

<select>
<optgroup label="Danh sách số">
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 03</option>
</optgroup>
<optgroup label="Danh sách chữ">
<option>Danh sách A</option>
<option>Danh sách B</option>
<option>Danh sách C</option>
</optgroup>
</select>

optgroup - sử dụng disabled

<select>
<optgroup label="Danh sách số" disabled="disabled">
<option>Danh sách 01</option>
<option>Danh sách 02</option>
<option>Danh sách 03</option>
<option>Danh sách 03</option>
</optgroup>
<optgroup label="Danh sách chữ">
<option>Danh sách A</option>
<option>Danh sách B</option>
<option>Danh sách C</option>
</optgroup>
</select>

FIELDSET - LEGEND

<form action="#">
<fieldset>
<legend>Thông tin cá nhân:</legend>
Họ tên: <input type="text" size="30" /><br />
Email: <input type="text" size="30" /><br />
Ngày sinh: <input type="text" size="10" />
</fieldset>
</form>
Thông tin cá nhân:
  • Họ tên: 
  • Email: 
  • Ngày sinh: 

Thuộc tính disabled="disabled"

Khi sử dụng thuộc tính này, chúng ta không thể nào thao tác các chức năng trong form được, ví dụ như không thể click checkbox, radio, không thể điền trường text cho input hay khu vực textarea.
<!DOCTYPE HTML>
<html>
<head></head>

<body>
<form action="#">
<fieldset disabled="disabled">
<legend>Thông tin cá nhân:</legend>
Họ tên: <input type="text" size="30" /><br />
Email: <input type="text" size="30" /><br />
Ngày sinh: <input type="text" size="10" />
</fieldset>
</form>
</body>
</html>
Thông tin cá nhân:
  • Họ tên: 
  • Email: 
  • Ngày sinh: 

Blog tổng hợp những kinh nghiệm được học, áp dụng và chia sẻ


Chuyển lên PHP7 7.0, không thể dùng Sypex SQL Dumper và cả MySql Dumper và cách khắc phục

By
( Khởi nghiệp với Internet)
Chào các bạn, thế là đến ngày hôm nay sao bao ngày vất vả di chuyển trang VnGeek về với căn nhà mới thì chuẩn bị ngồi nghỉ ngơi thì mình nghĩ là vào sao lưu lại cơ sở dữ liệu của site để cho an tâm nhưng mà lại có biến cố xảy ra.
Mới đầu mình nghĩ có lẽ là do lỗi nao đó phát sinh trong quá trình mình sao lưu và khôi phục chẳng hạn như cấu hình quyền tập tinh chưa đúng, lỗi file .htaccess, do cấu hình trong tập tin cấu hình của Apache2 (Mình chuyển từ Nginx sang Apache có vài lý do).
Mà theo mình được biết cái lỗi này [PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect()] là do không thể kết nối được đến MySQL.
Mình thoáng nghĩ rằng đâu có phải mình chỉnh sửa tập tin gì, cũng như là bản Sypex SQL Dumper và cả MySQL Dumper mình đều mới tải về thì làm sao có vấn đề gì được. Trong phút chốc định thần nghĩ lại xem mình đã thay đổi những gì thì mình nhớ lại đó là mình chuyển đổi Webserver Nginx sang Apache. Và mình cũng vừa nâng cấp phiên bản PHP từ PHP 5.0 lên 7.0.
Đó cũng chính là mấu chốt của vấn đề này. Và rõ ràng cái phiên bản Sypex mình tải về là phiên bản miễn phí của tác giả phát hành vào năm 2013 của công ty BINOVATOR ở đất nước Ukraina.
Cả phiên bản MySQL Dumper được đưa lên từ năm 2016.
Và mình không nghi ngờ gì nữa. Đó là do cả hai phiên bản này đều không Support cho PHP 7.0.
Giải quyết vấn đề này ra sao? Ồ đơn giản là hỏi anh Google.

Và kết quả không nằm ngoài dự đoán của mình.
Đều có những phiên bản được cập nhật từ GitHub.
Mình tải về và sau đó Up lên lại server thông qua WinSCP. (Thật ra thì dùng lệnh Widget cũng được – chỗ này mình muốn nói lại những gì mình làm chứ thật sự cũng không quan trọng lắm).
Link Tải tại đây: https://github.com/Alek-ON/sypex-dumper2.0.11-for-php7.0
Và các bạn ạ, mọi thứ hoạt động rất là tốt.
Giờ mình đi sao lưu cơ sở dữ liệu và toàn bộ dữ liệu quan trọng đây. Chúc các bạn một ngày thật vui vẻ. Hy vọng những bạn nào đã gặp lỗi sẽ biết cách mà khắc phục.

Blog tổng hợp những kinh nghiệm được học, áp dụng và chia sẻ


Sử dụng mã hóa UTF-8 với PHP và MySQL

By
( Khởi nghiệp với Internet)
Đối với một lập trình viên PHP hay MySQL, mọi thứ có vẻ khá dễ dàng và thoải mái khi làm việc với dữ liệu chỉ gồm các ký tự tiếng Anh. Cho đến khi bạn vướng vào sự rắc rối của mã hóa UTF-8 trong xử lý ngôn ngữ không phải tiếng Anh. Nói sơ lược về mã hóa UTF-8 thì đây là một kiểu mã hóa ký tự của tập ký tự Unicode. Nó được thiết kế để tương thích ngược với mã hóa ASCII và tránh những nhược điểm của UTF-16 và UTF-32. UTF-8 trở thành kiểu mã hóa phổ biến và chiếm ưu thế khi hơn một nửa số trang web hiện tại sử dụng kiểu mã hóa này. Trong bài viết này, sẽ có 3 hướng dẫn chính được trình bày để có thể sử dụng mã hóa UTF-8 trong PHP và MySQL:
  • Thay đổi trong file config php.ini và PHP code.
  • Thay đổi trong file config my.ini và những vấn đề liên quan khác đến MySQL.
  • Thay đổi dữ liệu trong CSDL MySQL sử dụng mã hóa latin1 thành mã hóa UTF-8.

PHP và mã hóa UTF-8

Để sử dụng UTF-8 là kiểu mã hóa ký tự mặc định, thay đổi ở file config php.ini như sau: default_charset = "utf-8"; Thay đổi trong PHP code:

Ở header:

header('Content-Type: text/html; charset=utf-8');

Trong file XML:

<?xml version="1.0" encoding="UTF-8"?> Tuy nhiên, không phải tất cả ký tự UTF-8 đều được chấp nhận ở trong XML, vì vậy cần loại bỏ những ký tự này. Một hàm hữu dụng sau đây có thể giải quyết vấn đề trên:
 function utf8_for_xml($string)
  {
    return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                        ' ', $string);
  }

Trong HTML:

  • HTML content: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  • HTML form: <form accept-charset="utf-8">

Chỉ định UTF-8 trong hàm hmlspecialchars:

htmlspecialchars($str, ENT_NOQUOTES, "UTF-8")

Khi kết nối với MySQL:

Sử dụng hàm mysql_set_charset:
 $link = mysql_connect('localhost', 'user', 'password');
 mysql_set_charset('utf8', $link);
Từ PHP 5.5.0, hàm mysql_set_charset được thay thế bởi mysql::set_charset
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
    
  /* check connection */
  if (mysqli_connect_errno()) {
      printf("Connect failed: %s\n", mysqli_connect_error());
      exit();
  }
    
  /* change character set to utf8 */
  if (!$mysqli->set_charset("utf8")) {
      printf("Error loading character set utf8: %s\n", $mysqli->error);
  } else {
      printf("Current character set: %s\n", $mysqli->character_set_name());
  }
    
  $mysqli->close();

Sử dụng hàm xử lý chuỗi tương thích với UTF-8:

Có nhiều hàm sẽ lỗi hoặc xử lý sai khi một ký tự cần nhiều hơn 1 byte (như UTF-8). Ví dụ hàm strlen sẽ trả về số lượng byte chứ không phải số lượng ký tự. Để giải quyết việc này có 2 tùy chọn:
  1. Sử dụng các hàm iconv (ví dụ: `iconv_strlen,…). Dù vậy, bản thân chuỗi ký tự vẫn cần phải đảm bảo được mã hóa đúng.
  2. Extension mbstring: extension cung cấp một tập đầy đủ các hàm cho việc xử lý mã hóa sử dụng nhiều byte (multibyte)

MySQL với mã hóa UTF-8

Thay đổi trong file config my.ini:

 [client]
  default-character-set=UTF-8
    
  [mysql]
  default-character-set=UTF-8
    
  [mysqld]
  character-set-client-handshake = false #force encoding to uft8
  character-set-server=UTF-8
  collation-server=UTF-8_general_ci
    
  [mysqld_safe]
  default-character-set=UTF-8
  • MySQL UTF-8 thực sự chỉ là một phần của tập ký tự UTF-8 khi chỉ sử dụng tối đa 3 bytes trong khi mã hóa UTF-8 yêu cầu 4 bytes. Do đó, một số ký tự không được hỗ trợ trong MySQL UTF-8. Kể từ MySQL 5.5.3, điều này có thể được giải quyết với tập ký tự utf8mb4.
  • Trong trường hợp không cài đặt mã hóa khi kết nối với MySQL, thì sau khi kết nối xong, có thể sử dụng lệnh/truy vấn sau: set names UTF-8;
  • Khi xác định kích cỡ của các trường kiểu varchar, đừng quên UTF-8 yêu cầu 4 bytes trên mỗi ký tự.

Chuyển đổi dữ liệu sử dụng mã hóa latin1 sang UTF-8

  1. Thiết lập cài đặt ở file config my.ini như hướng dẫn thứ 2.
  2. Thực hiện câu lệnh sau: ALTER SCHEMAyour-db-nameDEFAULT CHARACTER SET UTF-8;
  3. Xác nhận mọi thứ đã được cài đặt về UTF-8 mysql> show variables like 'char%';
  4. Tạo file dump cho việc chuyển đổi: mysqldump -u USERNAME -pDB_PASSWORD --opt --skip-set-charset --default-character-set=latin1 --skip-extended-insert DATABASENAME --tables TABLENAME > DUMP_FILE_TABLE.sql
  5. Thay thế charset trong file dump từ latin1 sang UTF-8 Ví dụ sử dụng Perl: perl -i -pe 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=UTF-8/' DUMP_FILE_TABLE.sql Đối với người dùng Windows: Việc chuyển đổi có thể thực hiện bằng WordPad sử dụng chức năng find-and-replace.
  6. Kể từ giờ, việc thay đổi sẽ được thực hiện trên CSDL nên đảm bảo backup dữ liệu trước khi thực hiện mysql> source "DUMP_FILE_TABLE.sql";
  7. Tìm kiếm những bản ghi có thể bị chuyển đổi sai và sửa chúng (ví dụ những ký tự được mã hóa 2 lần). Vì những ký tự không phải ASCII là multi-byte (sử dụng nhiều hơn 1 byte/ký tự) nên có thể tìm chúng bằng cách so sánh số byte và số lượng ký tự.
  • Kiểm tra có ký tự multi-byte hay không (nếu truy vấn sau trả về 0 thì không có ký tự multi-byte và có thể bỏ qua các bước tiếp theo) mysql> select count(*) from MY_TABLE where LENGTH(MY_FIELD) != CHAR_LENGTH(MY_FIELD);
  • Copy những hàng có ký tự multi-byte sang bảng tạm:
 create table temptable (
        select * from MY_TABLE where
        LENGTH(MY_FIELD) != CHAR_LENGTH(MY_FIELD));
  • Chuyển đổi ký tự bị mã hóa UTF-8 2 lần về dạng UTF-8 chuẩn. Vì MySQL đã tự động chuyển đổi dữ liệu sang UTF-8 một lần nữa trên dữ liệu UTF-8 nên cần một “thủ thuật” nhỏ để tránh việc chuyển đổi này. Đầu tiên, chuyển đổi kiểu mã hóa về latin1, do đó mã hóa 2 lần sẽ bị loại bỏ : alter table temptable modify temptable.ArtistName varchar(128) character set latin1; Lưu ý: Cần đặt đúng kiểu dữ liệu cũ. Như ở ví dụ trên là vachar(128) Vấn đề bây giờ là nếu cài đặt cột hiện tại về mã hóa UTF-8, MySQL sẽ chuyển đổi từ latin1 về UTF-8. Để tránh việc này, chúng ta thay đổi kiểu dữ liệu của cột về blob rồi sau đó mới cài đặt UTF-8. Điều này lợi dụng từ việc MySQL không chuyển đổi kiểu mã hóa của một blob.
alter table temptable modify temptable.ArtistName blob;
alter table temptable modify temptable.ArtistName varchar(128) character set UTF-8;
  • Loại bỏ hàng chỉ có ký tự single-byte (sử dụng một byte) ra khỏi bảng tạm: delete from temptable where LENGTH(MY_FIELD) = CHAR_LENGTH(MY_FIELD);
  • Thay thế dữ liệu vào bảng chính replace into MY_TABLE (select * from temptable);
  1. Kiểm tra dữ liệu còn lại, nếu cần thì thực hiện lại từ bước 7.

Lời kết

Mã hóa dữ liệu đòi hỏi sự cẩn trọng và tỉ mỉ. Nếu hiểu rõ về nó, lập trình viên có thể tiết kiệm một khoảng thời gian và công sức đáng kể khi đối mặt với những vấn đề về dữ liệu. Bài viết này như một lần nữa khẳng định tầm quan trọng của việc cân nhắc khi định nghĩa charset trong dự án cũng như môi trường phát triển ngay từ ban đầu.
Referrence: https://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql

Blog tổng hợp những kinh nghiệm được học, áp dụng và chia sẻ


Loading...