Xin chào, tôi hiện đang làm việc trên một danh sách cấm và tôi đang suy nghĩ về việc chọn loại dữ liệu nào để lưu trữ địa chỉ IP trong cơ sở dữ liệu. Kiểu dữ liệu nhị phân có lý tưởng không?
mysql
0 0
Chia sẻ
- 5 Cộng tác viên
- 4 Trả lời
- 337 Lượt xem
- 2 tuần Khoảng thời gian thảo luận
- Bài đăng mới nhất Bài đăng mới nhất của Vikas_30
Câu trả lời được đề xuất
Đã trả lời bởi Dani 3.354 trong một
Hiện tại tôi lưu trữ địa chỉ IP dưới dạng Varchar
Nhị phân dành cho dữ liệu nhị phân như hình ảnh, tệp thực thi, v.v. không phải văn bản
Tất cả 4 câu trả lời
rproffitt 2.382 "Không có gì để xem ở đây. " Người điều hành
1 năm trướcTôi đang đọc https. //www. daniweb. com/programming/databases/threads/510152/the-best-way-to-store-ipv4-ipv6 cũng tiết lộ INET6_ATON và có thể chức năng khác mà bạn sẽ sớm hỏi về
0 0
Chia sẻ
Dani 3.354 Nữ hoàng của DaniWeb Quản trị viên Áp phích nổi bật Premium Member
1 năm trướcHiện tại tôi lưu trữ địa chỉ IP dưới dạng Varchar
Nhị phân dành cho dữ liệu nhị phân như hình ảnh, tệp thực thi, v.v. không phải văn bản
1 0
Chia sẻ
jwenting 1.855 người chăn vịt Đồng nghiệp nhóm
1 năm trướcLưu trữ chúng dưới dạng chuỗi. Trừ khi bạn muốn thực hiện chuyển đổi chuỗi thành số mỗi lần biến biểu diễn chuỗi quen thuộc thành định dạng số của nó, đó là cách nên làm
Nếu bạn muốn lưu trữ địa chỉ IP trong cơ sở dữ liệu mysql thì đừng nhầm khi sử dụng kiểu dữ liệu varchar vì bạn có thể sử dụng kiểu dữ liệu INT UNSIGNED 4(BYTE). sử dụng kiểu dữ liệu số nguyên, bạn có thể tiết kiệm nhiều dung lượng hơn trong cơ sở dữ liệu
khi bạn kích hoạt truy vấn chèn tại thời điểm đó, hãy sử dụng INET_ATON() và chọn truy vấn tại thời điểm đó, sử dụng INET_NTOA(). làm thế nào để sử dụng chức năng này đưa ra ví dụ dưới đây
Tạo bảng
CREATE TABLE IF NOT EXISTS `ip_addresses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ip_address` INT(4) UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
);
Chèn dữ liệu
INSERT INTO `ip_addresses` (`ip_address`) VALUES (INET_ATON("127.0.0.1"));
Chọn dữ liệu
SELECT id, INET_NTOA(`ip_address`) as ip FROM `ip_addresses`;
Hãy thử điều này, điều này rất đơn giản
Chúng tôi có thể lưu trữ một địa chỉ IP với sự trợ giúp của INT unsigned. Trong khi sử dụng INSERT, hãy thêm INET_ATON() và với SELECT, hãy thêm INET_NTOA(). Địa chỉ IP ở định dạng chấm
Hãy để chúng tôi xem một ví dụ
Tạo bảng
mysql> create table IPV4AddressDemo -> ( -> `IPV4Address` INT UNSIGNED -> ); Query OK, 0 rows affected (0.52 sec)Chèn địa chỉ IP vào bảng, với INET_ATON
mysql> insert into IPV4AddressDemo values(INET_ATON("120.0.0.1")); Query OK, 1 row affected (0.17 sec)Để hiển thị tất cả các bản ghi
mysql> select *from IPV4AddressDemo;Sau đây là đầu ra, nhưng chắc chắn chúng tôi muốn nó ở định dạng địa chỉ IP
+-------------+ | IPV4Address | +-------------+ | 2013265921 | +-------------+ 1 row in set (0.00 sec)Vì đầu ra ở trên đưa ra một chuỗi các số nguyên, nhưng chúng ta có thể chuyển đổi chúng thành định dạng địa chỉ IP ban đầu. Đối với điều đó, hãy sử dụng INET_NTOA
Đây là một kiểu dữ liệu trừu tượng và không thể được sử dụng trực tiếp với các toán tử nhị phân hoặc nhị phân tiêu chuẩn C. Chỉ các biến cục bộ hoặc toàn cục kiểu ip_addr_t mới được hỗ trợ. Một biến thuộc loại này cũng có thể được lưu trữ trong một mảng liên kết dưới dạng khóa hoặc giá trị
Vue hỗ trợ các đặc điểm và hoạt động sau cho các biến loại địa chỉ IP
Khai báo biến địa chỉ IPip_addr_t i1; // global variable of type ip_addr_t __auto ip_addr_t i2; // auto variable of type ip_addr_t i2 = __ip4hdr->src_addr; // store source IP address in a local ip_addr_t variable. ip_aso[“src_ip_addr”] = __ip4hdr->src_addr; // store in an associative array.
Các vòng loại đã ký, chưa ký, đăng ký, tĩnh, luồng và nhân không được hỗ trợ cho các biến loại ip_addr_t
thao tác gán
Toán tử gán (=) cho phép một biến loại ip_addr_t được gán cho một biến loại ip_addr_t khác và nó cũng cho phép gán địa chỉ IP hoặc tên máy chủ không đổi cho biến loại ip_addr_t. Các giá trị ban đầu của biến bị ghi đè. Không cho phép truyền kiểu từ hoặc đến các kiểu biến ip_addr_t
Trong ví dụ sau, nội dung của ip_addr_t i1 được gán cho i2. ________số 8_______
thao tác so sánh
Chỉ có đẳng thức (==) và bất đẳng thức (. toán tử =) được phép cho các biến loại ip_addr_t. Việc so sánh chỉ được phép giữa hai biến loại ip_addr_t và với loại chuỗi không đổi (địa chỉ IP hoặc tên máy chủ được cung cấp trong dấu ngoặc kép “192. 168. 1. 1” hoặc “ví dụ. com")
Kết quả của toán tử đẳng thức là True (1) nếu cả hai chứa cùng loại địa chỉ IP (IPV4 hoặc IPV6) và các giá trị. hoặc Sai (0) ngược lại. Toán tử bất đẳng thức là lời khen chính xác của điều đó. Không có toán tử so sánh nào khác (>=, >, < hoặc =