Bộ ký tự mysql nhị phân

Bạn có đang sử dụng bộ ký tự

# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL trong cơ sở dữ liệu của mình không?

UTF-8

có thể đại diện cho mọi ký hiệu trong bộ ký tự Unicode, nằm trong khoảng từ U+000000 đến U+10FFFF. Đó là 1.114.112 biểu tượng có thể. [Không phải tất cả các điểm mã Unicode này đều đã được gán ký tự, nhưng điều đó không ngăn UTF-8 có thể mã hóa chúng. ]

UTF-8 là mã hóa có độ rộng thay đổi; . Các biểu tượng có giá trị điểm mã số thấp hơn được mã hóa bằng ít byte hơn. Bằng cách này, UTF-8 được tối ưu hóa cho trường hợp phổ biến khi các ký tự ASCII và các ký tự khác [có điểm mã nằm trong khoảng từ U+000000 đến U+00FFFF] được sử dụng — trong khi vẫn cho phép các ký hiệu thiên văn [có điểm mã nằm trong khoảng từ U+010000 đến U

# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL

Trong một thời gian dài, tôi đã sử dụng bộ ký tự

# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL cho cơ sở dữ liệu, bảng và cột, giả sử nó được ánh xạ tới mã hóa UTF-8 được mô tả ở trên. Bằng cách sử dụng
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9, tôi có thể lưu trữ bất kỳ biểu tượng nào tôi muốn trong cơ sở dữ liệu của mình — hoặc tôi nghĩ vậy

Trong khi viết về mã hóa ký tự bên trong của JavaScript, tôi nhận thấy rằng không có cách nào để chèn biểu tượng U+1D306 TETRAGRAM FOR CENTER [

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
4] vào cơ sở dữ liệu MySQL đằng sau trang web này. Cột tôi đang cố cập nhật có đối chiếu
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
5 và bộ ký tự kết nối được đặt thành
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9

________số 8

Nội dung đã bị cắt bớt ở phần đầu tiên , trong trường hợp này là

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
4 — vì vậy, thay vào đó, việc cố gắng chèn
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
8 thực sự đã chèn vào
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
9, dẫn đến mất dữ liệu [và có thể gây ra sự cố bảo mật; xem bên dưới]. MySQL cũng trả lại một thông báo cảnh báo

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
2

Hóa ra bộ ký tự

# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL chỉ thực hiện một phần mã hóa UTF-8 phù hợp. Nó chỉ có thể lưu trữ các ký hiệu được mã hóa UTF-8 bao gồm một đến ba byte;

Vì các ký hiệu thiên thể [có các điểm mã nằm trong khoảng từ U+010000 đến U+10FFFF], mỗi ký hiệu bao gồm bốn byte trong UTF-8, nên bạn không thể lưu trữ chúng bằng triển khai

# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL

Điều này không chỉ ảnh hưởng đến ký tự

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
4 mà còn ảnh hưởng đến các ký hiệu quan trọng hơn như U+01F4A9 PILE OF POO [
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
8]. Tổng cộng, đó là 1.048.575 điểm mã có thể bạn không thể sử dụng. Trên thực tế,
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL chỉ cho phép bạn lưu trữ 5. 88% [
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
85] của tất cả các điểm mã Unicode có thể. UTF-8 thích hợp có thể mã hóa 100% tất cả các điểm mã Unicode

Như đã trình bày ở trên, hành vi này có thể dẫn đến mất dữ liệu, nhưng tệ hơn là có thể dẫn đến các lỗ hổng bảo mật. Dưới đây là một số ví dụ, tất cả đều được phát hiện sau khi xuất bản bài viết này

  • Lỗ hổng chèn đối tượng PHP trong WordPress 70 bảng và tôi biết rằng tôi thực sự chỉ quan tâm đến
    $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
    249 trong một bảng cụ thể. Tôi biết tôi chỉ có thể chuyển đổi một bảng cụ thể đó. Nhưng câu hỏi của tôi là. trong kết nối ứng dụng khách của tôi [từ ứng dụng Python Django], tôi cần đặt mã hóa thành
    $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
    0 để đảm bảo rằng tôi đang chèn/truy vấn dữ liệu theo đúng mã hóa cho bảng được đề cập

    Nhưng có hại không khi cài đặt đó làm cài đặt toàn cầu trong tất cả các kết nối DB cho tất cả các bảng mà tôi chưa di chuyển sang

    $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
    0?

    Hay tốt hơn là di chuyển tất cả các bảng?

Prateek Gupte đã viết trên.

Điều này sẽ chăm sóc các bản sao cho cơ sở dữ liệu?

dGo đã viết trên.

Cám ơn vì cái này. Tôi đã viết một đoạn script nhỏ để tạo truy vấn cập nhật cho bảng, cột và dạng xem. Nếu nó đúng [tôi đang hỏi], tôi nghĩ nó cũng có thể hữu ích cho những người khác. Vì vậy, tập lệnh này tạo và danh sách các truy vấn SQL mà bạn sẽ phải chạy để cập nhật bộ ký tự bảng, cột và dạng xem

Bài Viết Liên Quan

Toplist mới

Bài mới nhất

Chủ Đề