Chỉ là một câu hỏi nhanh ..
Trong số hai tùy chọn được đề cập dưới đây, làm thế nào để lưu trữ vào cột varbinary
trong MySQL?
public_key = '67498930589635764678356756719'
hoặc
public_key = 67498930589635764678356756719
Phương pháp thứ hai sẽ hoạt động? Tôi đang tham gia một thời điểm khẩn cấp làm việc trên một máy chủ sản xuất và không muốn thử nghiệm nó.
Cảm ơn bạn cho bất kỳ sự giúp đỡ.
hỏi ngày 2 tháng 2 năm 2010 lúc 9:10Feb 2, 2010 at 9:10
Dữ liệu có thể in có thể được chèn bằng báo giá. Dữ liệu không thể in có thể được chèn bằng các giá trị thập lục phân. I E.:
INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
Đã trả lời ngày 2 tháng 2 năm 2010 lúc 9:19Feb 2, 2010 at 9:19
Håvard Shåvard sHåvard S
22.6K6 Huy hiệu vàng59 Huy hiệu bạc71 Huy hiệu đồng6 gold badges59 silver badges71 bronze badges
0
11.3.3 & nbsp; các loại nhị phân và varbinary
Các loại BINARY
và VARBINARY
tương tự như CHAR
và VARCHAR
, ngoại trừ việc chúng lưu trữ các chuỗi nhị phân thay vì các chuỗi không phải là chuỗi. Đó là, họ lưu trữ các chuỗi byte chứ không phải chuỗi nhân vật. Điều này có nghĩa là chúng có tập hợp và đối chiếu ký tự binary
, và so sánh và sắp xếp dựa trên các giá trị số của các byte trong các giá trị.
Độ dài tối đa cho phép là giống nhau đối với BINARY
và VARBINARY
như đối với CHAR
và VARCHAR
, ngoại trừ độ dài cho BINARY
và VARBINARY
được đo bằng byte thay vì ký tự.
Các loại dữ liệu BINARY
và VARBINARY
khác biệt với các loại dữ liệu
public_key = 67498930589635764678356756719
8 và public_key = 67498930589635764678356756719
9. Đối với các loại sau, thuộc tính BINARY
không khiến cột được coi là cột chuỗi nhị phân. Thay vào đó, nó gây ra đối chiếu nhị phân [INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
1] cho bộ ký tự cột [hoặc bộ ký tự mặc định bảng nếu không có bộ ký tự cột nào được chỉ định] và chính cột lưu trữ các chuỗi ký tự không phải là chuỗi byte nhị phân. Ví dụ: nếu bộ ký tự mặc định là INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
2, INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
3 được coi là INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
4. Điều này khác với INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
5, lưu trữ các chuỗi nhị phân 5 byte có bộ và đối chiếu ký tự ____99. Để biết thông tin về sự khác biệt giữa đối chiếu binary
của bộ ký tự binary
và các đối chiếu INSERT INTO Table[VarBinaryColumn] VALUES['Printable data'] -- Will be stored as binary representation using the charset of the operating system
INSERT INTO Table[VarBinaryColumn] VALUES[0x12345] -- Non-printable binary data
1 của các bộ ký tự không phải là bộ, xem Phần & NBSP; 10.8.5, đối chiếu nhị phân so với các đối chiếu _BIN. Nếu chế độ SQL nghiêm ngặt không được bật và bạn gán giá trị cho cột BINARY
hoặc VARBINARY
vượt quá độ dài tối đa của cột, giá trị bị cắt ngắn để phù hợp và cảnh báo được tạo ra. Đối với các trường hợp cắt ngắn, để gây ra lỗi xảy ra [thay vì cảnh báo] và triệt tiêu chèn giá trị, hãy sử dụng chế độ SQL nghiêm ngặt. Xem Phần & NBSP; 5.1.11, Chế độ SQL Server SQL.
Khi các giá trị BINARY
được lưu trữ, chúng được gắn bên phải với giá trị PAD theo độ dài được chỉ định. Giá trị pad là
mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
3 [số không]. Các giá trị được gắn bên phải với mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
3 để chèn và không có byte dấu vết nào được gỡ bỏ để truy xuất. Tất cả các byte đều có ý nghĩa trong so sánh, bao gồm các hoạt động mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
5 và mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
6. mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
3 và không gian khác nhau trong so sánh, với mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
3 sắp xếp trước không gian.Ví dụ: Đối với cột
mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
9, varbinary
0 trở thành varbinary
1 khi được chèn. varbinary
2 trở thành varbinary
3 khi chèn. Cả hai giá trị được chèn vẫn không thay đổi để truy xuất. Đối với VARBINARY
, không có phần đệm để chèn và không có byte bị tước để truy xuất. Tất cả các byte đều có ý nghĩa trong so sánh, bao gồm các hoạt động
mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
5 và mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
6. mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
3 và không gian khác nhau trong so sánh, với mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
3 sắp xếp trước không gian. Đối với những trường hợp có các byte byte kéo theo hoặc so sánh bỏ qua chúng, nếu một cột có một chỉ mục yêu cầu các giá trị duy nhất, chèn các giá trị vào cột chỉ khác nhau về số lượng byte byte kéo dài dẫn đến lỗi khóa trùng lặp. Ví dụ: nếu một bảng chứa varbinary
9, một nỗ lực lưu trữ varbinary
2 gây ra lỗi khóa trùng lặp.
Bạn nên xem xét các đặc điểm đệm và tước trước đó một cách cẩn thận nếu bạn có kế hoạch sử dụng kiểu dữ liệu BINARY
để lưu trữ dữ liệu nhị phân và bạn yêu cầu giá trị được lấy chính xác giống như giá trị được lưu trữ. Ví dụ sau đây minh họa cách ____ 33 padding của BINARY
giá trị ảnh hưởng đến so sánh giá trị cột:
mysql> CREATE TABLE t [c BINARY[3]];
Query OK, 0 rows affected [0.01 sec]
mysql> INSERT INTO t SET c = 'a';
Query OK, 1 row affected [0.01 sec]
mysql> SELECT HEX[c], c = 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX[c] | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set [0.09 sec]
Nếu giá trị được truy xuất phải giống như giá trị được chỉ định để lưu trữ không có đệm, có thể tốt hơn là sử dụng VARBINARY
hoặc một trong các loại dữ liệu BINARY
5 thay thế.