So sánh 2 kiểu dữ liệu datetime utf năm 2024
Dự án với hệ thống sử dụng MySQL cho cơ sở dữ liệu. Với thiết kế sử dụng UTF-8 encoding cho các table. Dự án đã release, chức năng đang hoạt động mượt mà thì một ngày đẹp trời, hệ thống quản lý lỗi bắn về 1 error message. Show
Sau một (vài) hồi tìm hiểu thì dev đưa ra kết luận: Do hệ thống hiện tại đang setting DB với charset = "utf8", mà thực ra với MySQL "utf8" lại không hề là UTF-8 như mong muốn thiết kế ban đầu. Vậy utf8 của MySQL là gìTheo như Document của MySQL định nghĩa thì utf8 is an alias for the utf8mb3 character set. https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html Ta thấy được vấn đề quan trọng nhất, đó là "utf8" của MySQL yêu cầu tối đa 3 bytes cho mỗi kí tự multibyte. Trong khi đó UTF-8 encoding lại có thể có từ 1 đến 4 bytes. https://en.wikipedia.org/wiki/UTF-8 Nói ngắn gọn, cái thứ gọi là utf8 của MySQL chỉ encode được "một phần" của UTF-8. Và một ngày đẹp trời lỗi sẽ xảy ra khi xuất hiện 1 character insert vào DB có độ dài lớn hơn 3 bytes. Tái hiện lại BugThử tái hiện lại bug trên bằng cách insert 1 kí tự có mã U+1D306 (Là kí hiệu của TETRAGRAM FOR CENTRE (𝌆)) vào MySQL DB. Setting column của table được insert vào với collation = utf8_unicode_ci, charset = utf8
Rõ ràng, khi tiến hành query lại data đã insert, phần nội dung đã bị cắt ngắn đi kí hiệu 𝌆 Bên cạnh có, khi kiểm tra warning của MySQL thì nhận được message tương tự ở trên
Tóm gọn thì:
Kết luậnVới việc tìm hiểu con bug này thì có thể rút ra được một số bài học
Nguồn: https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434 https://mathiasbynens.be/notes/mysql-utf8mb4 Đặt ngày (date) và giờ (time) trong JavaScript không khó, bài viết này sẽ chỉ cho bạn mọi thứ bạn cần biết.
Làm việc với ngày tháng là một phần quan trọng của lập trình. Đối tượng date (ngày tháng) có sẵn được dùng để làm việc với ngày tháng và thời gian trong JavaScript. Các phương thức khác nhau của đối tượng date làm cho tác vụ này dễ dàng hơn rất nhiều. Trong bài viết này, bạn sẽ tìm hiểu mọi thứ bạn cần biết về cách làm việc với ngày và giờ trong JavaScript. Hãy bắt đầu nào. 1. Làm việc với ngày và giờ trong JavaScript: Cách tạo đối tượng dataBạn có thể tạo đối tượng date trong JavaScript bằng bốn cách sau: 1.1 new Date()Hàm new Date() tạo một đối tượng date với ngày và giờ hiện tại.
Đầu ra :
1.2 new Date(datestring)Phương thức khởi tạo new Date(datestring) tạo một đối tượng date từ một chuỗi ngày tháng.
Đầu ra :
1.3 new Date(milliseconds)Hàm new Date(milliseconds) tạo một đối tượng date bằng cách thêm mili giây vào thời gian bằng không. Tham số biểu thị thời gian đã trôi qua tính bằng mili giây kể từ ngày 1 tháng 1 năm 1970 theo giờ UTC.
Đầu ra : `console.log(d);`0 `console.log(d);`1 1.4 new Date(year, month, day, hours, minutes, seconds, milliseconds)Hàm new Date(year, month, day, hours, minutes, seconds, milliseconds) tạo một đối tượng ngày với một ngày và giờ được chỉ định. Bảy tham số chỉ định năm, tháng, ngày, giờ, phút, giây và mili giây tương ứng. `console.log(d);`2
Đầu ra : `console.log(d);`4 Bạn cũng có thể tạo một đối tượng date với sáu, bốn, ba hoặc hai tham số.
Ghi chú :
`console.log(d);`5 `console.log(d);`6
Đầu ra : `console.log(d);`8 \>>> Xem thêm: 10 Lý do hàng đầu để học JavaScript làm ngôn ngữ lập trình nền tảng 2. Làm việc với ngày và giờ trong JavaScript: Các phương thức get dữ liệuBạn có thể sử dụng các phương pháp sau để lấy thông tin từ một đối tượng date. 2.1 getFullYear()Phương thức này trả về năm dưới dạng số có bốn chữ số (yyyy) theo giờ địa phương.
`Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`0 Đầu ra : `Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`1 2.2 getMonth()Phương thức này trả về tháng dưới dạng số (0-11) theo giờ địa phương.
`Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`3 Đầu ra : `Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`4 2.3 getDate()Phương thức này trả về ngày dưới dạng số (1-31) theo giờ địa phương.
`Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`6 Đầu ra : `Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`7 2.4 getHours()Phương thức này trả về giờ (0-23) theo giờ địa phương.
`Mon Jan 03 2022 20:27:58 GMT+0530 (India Standard Time)`9 Đầu ra : `let d = new Date("2022-01-01");`0 2.5 getMinutes()Phương thức này trả về phút (0-59) theo giờ địa phương.
`let d = new Date("2022-01-01");`2 Đầu ra : `let d = new Date("2022-01-01");`3 2.6 getSeconds()Phương thức này trả về giây (0-59) theo giờ địa phương.
`let d = new Date("2022-01-01");`5 Đầu ra : `let d = new Date("2022-01-01");`6 2.7 getMilliseconds()Phương thức này trả về mili giây (0-999) theo giờ địa phương.
`let d = new Date("2022-01-01");`8 Đầu ra : `let d = new Date("2022-01-01");`9 2.8 getTime()Phương thức này trả về thời gian tính bằng mili giây kể từ ngày 1 tháng 1 năm 1970.
`console.log(d);`1 Đầu ra : `console.log(d);`2 2.9 getDay()Phương thức này trả về ngày trong tuần dưới dạng số (0-6) theo giờ địa phương.
`console.log(d);`4 Đầu ra : `console.log(d);`5 Lưu ý : Nếu bạn muốn làm việc với ngày UTC, bạn có thể sử dụng các phương pháp ngày sau: getUTCDate(), getUTCDay(), getUTCFullYear(), getUTCHours(), getUTCMilliseconds(), getUTCMinutes(), getUTCMonth(), and getUTCSeconds(). \>>> Xem thêm: Sự khác biệt chính giữa JavaScript và Python bạn đã biết? 3. Làm việc với ngày và giờ trong JavaScript: Phương pháp đặt ngày trong JavaScriptBạn có thể sử dụng các phương pháp sau để đặt một phần của đối tượng date. 3.1 setDate()Phương pháp này đặt ngày dưới dạng số (1-31) cho một ngày cụ thể theo giờ địa phương.
`console.log(d);`7
Đầu ra : `console.log(d);`9 3.2 setFullYear()Phương pháp này đặt năm cho một ngày cụ thể theo giờ địa phương.
`Sat Jan 01 2022 05:30:00 GMT+0530 (India Standard Time)`1
Đầu ra : `Sat Jan 01 2022 05:30:00 GMT+0530 (India Standard Time)`3 3.3 setHours()Phương pháp này đặt giờ (0-23) cho một ngày cụ thể theo giờ địa phương.
`Sat Jan 01 2022 05:30:00 GMT+0530 (India Standard Time)`5
Đầu ra : `Sat Jan 01 2022 05:30:00 GMT+0530 (India Standard Time)`7 3.4 setMilliseconds()Phương thức này đặt mili giây (0-999) cho một ngày cụ thể theo giờ địa phương.
`Sat Jan 01 2022 05:30:00 GMT+0530 (India Standard Time)`9
Đầu ra : `let d1 = new Date(0);`1 Tương tự, bạn có thể sử dụng các phương thức setMinutes(), setMonth(), and setSeconds() để đặt phút (0-59), tháng (0-11), và giây (0-59) tương ứng cho một ngày cụ thể theo giờ địa phương. 4. Làm việc với ngày và giờ trong JavaScript: Ví dụ về thời gian hiện tại của JavaScriptMột ví dụ đơn giản để in thời gian hiện tại của hệ thống: `let d1 = new Date(0);`2 `let d1 = new Date(0);`3 `let d1 = new Date(0);`4 `let d1 = new Date(0);`5 `let d1 = new Date(0);`6 `let d1 = new Date(0);`7 `let d1 = new Date(0);`8 `let d1 = new Date(0);`9 `console.log(d1);`0 `console.log(d1);`1 `console.log(d1);`2 `console.log(d1);`3 `console.log(d1);`4 `console.log(d1);`5 `console.log(d1);`6 `console.log(d1);`7 Nếu bạn muốn xem toàn bộ mã nguồn được sử dụng trong bài viết này, đây là kho lưu trữ GitHub. \>>> Xem thêm: Hiểu Rõ Về Các Loại Vòng Lặp Trong Javascript Và Cấu Trúc Từng Loại Vòng Lặp 5. Phát triển dự án bằng cách sử dụng khái niệm ngày của JavaScriptBạn sẽ gặp nhiều trường hợp về ngày JavaScript khi làm việc trên các ứng dụng trong thế giới thực. Nếu bạn muốn bắt đầu với một dự án đơn giản và có được kinh nghiệm thực tế, bạn có thể phát triển đồng hồ kỹ thuật số bằng HTML, CSS và JavaScript. Cùng với ngày tháng, bạn cũng sẽ học một số khái niệm JavaScript quan trọng như làm việc với các biến, sử dụng các hàm, truy cập và thêm thuộc tính vào DOM, v.v. |