當前位置:首頁 » 操作系統 » 資料庫binary

資料庫binary

發布時間: 2023-01-17 16:44:13

1. binary 數據類型

語法 BINARY [ ( max-length ) ]參數 max-length 值的最大長度,以位元組為單位。該長度必須在 1 到 32767 范圍內。如果未指定長度,則值為 1。注釋 在比較過程中,將會精確地逐個位元組地對 BINARY 值進行比較。與之不同的是,CHAR 數據類型的值是使用資料庫的歸類序列進行比較。如果某個二進制字元串是另一個二進制字元串的前綴,即認為較短的字元串小於較長的字元串。與 CHAR 值不同,BINARY 值在字元集轉換期間不會進行轉換。BINARY 在語義上等同於 VARBINARY。它是一種可變長度類型。在其它資料庫管理系統中,BINARY 是一種固定長度類型。另請參見 VARBINARY 數據類型 LONG BINARY 數據類型 字元串函數

2. mysql數據類型中blob和binary的區別

MySQL 數據類型細分下來,大概有以下幾類:

  • 數值,典型代表為 tinyint,int,bigint

  • 浮點/定點,典型代表為 float,double,decimal 以及相關的同義詞

  • 字元串,典型代表為 char,varchar

  • 時間日期,典型代表為 date,datetime,time,timestamp

  • 二進制,典型代表為 binary,varbinary

  • 位類型

  • 枚舉類型

  • 集合類型

  • 大對象,比如 text,blob

  • json 文檔類型

  • 一、數值類型(不是數據類型,別看錯了)如果用來存放整數,根據范圍的不同,選擇不同的類型。


  • 注意:timestamp 代表的時間戳是一個 int32 存儲的整數,取值范圍為 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范圍為 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。

  • 綜上所述,日期這塊類型的選擇遵循以下原則:

  • 1. 如果時間有可能超過時間戳范圍,優先選擇 datetime。2. 如果需要單獨獲取年份值,比如按照年來分區,按照年來檢索等,最好在表中添加一個 year 類型來參與。3. 如果需要單獨獲取日期或者時間,最好是單獨存放,而不是簡單的用 datetime 或者 timestamp。後面檢索時,再加函數過濾,以免後期增加 SQL 編寫帶來額外消耗。

  • 4. 如果有保存毫秒類似的需求,最好是用時間類型自己的特性,不要直接用字元類型來代替。MySQL 內部的類型轉換對資源額外的消耗也是需要考慮的。

    示例 5

  • 建立表 t5,對這些可能需要的欄位全部分離開,這樣以後寫 SQL 語句的時候就很容易了。

  • 當然了,這種情形佔用額外的磁碟空間。如果想在易用性與空間佔用量大這兩點來折中,可以用 MySQL 的虛擬列來實時計算。比如假設 c5 欄位不存在,想要得到 c5 的結果。mysql-(ytt/3305)->alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1 Duplicates: 0 Warnings: 0



  • 五、二進制類型

  • binary 和 varbinary 對應了 char 和 varchar 的二進制存儲,相關的特性都一樣。不同的有以下幾點:

  • binary(10)/varbinary(10) 代表的不是字元個數,而是位元組數。

  • 行結束符不一樣。char 的行結束符是 ,binary 的行結束符是 0x00。

  • 由於是二進制存儲,所以字元編碼以及排序規則這類就直接無效了。

  • 示例 6

    來看這個 binary 存取的簡單示例,還是之前的變數 @a。

    切記!這里要提前計算好 @a 佔用的位元組數,以防存儲溢出。


  • 六、位類型

  • bit 為 MySQL 里存儲比特位的類型,最大支持 64 比特位, 直接以二進制方式存儲,一般用來存儲狀態類的信息。比如,性別,真假等。具有以下特性:

  • 1. 對於 bit(8) 如果單純存放 1 位,左邊以 0 填充 00000001。2. 查詢時可以直接十進制來過濾數據。3. 如果此欄位加上索引,MySQL 不會自己做類型轉換,只能用二進制來過濾。

  • 示例 7

  • 創建表 c1, 欄位性別定義一個比特位。mysql-(ytt/3305)->create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)



  • mysql-(ytt/3305)->select cast(gender as unsigned) 'f1' from c1;+------+| f1 |+------+| 0 || 1 |+------+2 rows in set (0.00 sec)


  • 過濾數據也一樣,二進制或者直接十進制都行。mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = b'1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = '1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)


  • 其實這樣的場景,也可以定義為 char(0),這也是類似於 bit 非常優化的一種用法。

  • mysql-(ytt/3305)->create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)


  • 那現在我給表 c1 簡單的造點測試數據。

  • mysql-(ytt/3305)->select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)


  • 把 c1 的數據全部插入 c2。

  • mysql-(ytt/3305)->insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432 Duplicates: 0 Warnings: 0


  • 兩張表的磁碟佔用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd


  • 檢索方式稍微有些不同,不過效率也差不多。所以說,字元類型不愧為萬能類型。


  • 七、枚舉類型

  • 枚舉類型,也即 enum。適合提前規劃好了所有已經知道的值,且未來最好不要加新值的情形。枚舉類型有以下特性:

  • 1. 最大佔用 2 Byte。2. 最大支持 65535 個不同元素。3. MySQL 後台存儲以下標的方式,也就是 tinyint 或者 smallint 的方式,下標從 1 開始。4. 排序時按照下標排序,而不是按照裡面元素的數據類型。所以這點要格外注意。

  • 示例 8

  • 創建表 t7。mysql-(ytt/3305)->create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)



  • 八、集合類型

    集合類型 SET 和枚舉類似,也是得提前知道有多少個元素。SET 有以下特點:

  • 1. 最大佔用 8 Byte,int64。2. 內部以二進制位的方式存儲,對應的下標如果以十進制來看,就分別為 1,2,4,8,...,pow(2,63)。3. 最大支持 64 個不同的元素,重復元素的插入,取出來直接去重。4. 元素之間可以組合插入,比如下標為 1 和 2 的可以一起插入,直接插入 3 即可。

  • 示例 9

    定義表 c7 欄位 c1 為 set 類型,包含了 8 個值,也就是下表最大為 pow(2,7)。

  • mysql-(ytt/3305)->create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)


  • 插入 1 到 128 的所有組合。

  • mysql-(ytt/3305)->INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS ( SELECT 1 AS cnt UNION ALL SELECT cnt + 1 FROM ytt_number WHERE cnt < pow(2, 7) )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128 Duplicates: 0 Warnings: 0

  • 九、數據類型在存儲函數中的用法

    函數里除了顯式聲明的變數外,默認 session 變數的數據類型很弱,隨著給定值的不同隨意轉換。

  • 示例 10

  • 定義一個函數,返回兩個給定參數的乘積。定義里有兩個變數,一個是 v_tmp 顯式定義為 int64,另外一個 @vresult 隨著給定值的類型隨意變換類型。


    簡單調用下。

  • mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)


  • 總結

    本篇把 MySQL 基本的數據類型做了簡單的介紹,並且用了一些容易理解的示例來梳理這些類型。我們在實際場景中,建議選擇適合最合適的類型,不建議所有數據類型簡單的最大化原則。比如能用 varchar(100),不用 varchar(1000)。

3. SQL-SQL中binary 和 varbinary的區別

binary 和 varbinary
固定長度 (binary) 的或可變長度 (varbinary) 的 binary 數據類型。

binary [ ( n ) ]
固定長度的 n 個位元組二進制數據。N 必須從 1 到 8,000。存儲空間大小為 n+4 位元組。

varbinary [ ( n ) ]
n 個位元組變長二進制數據。n 必須從 1 到 8,000。存儲空間大小為實際輸入數據長度 +4 個位元組,而不是 n 個位元組。輸入的數據長度可能為 0 位元組。在 SQL-92 中 varbinary 的同義詞為 binary varying。

注釋
如果在數據定義或變數聲明語句中沒有指定 n,默認長度為 1。如果沒有用 CAST 函數指定 n,默認長度為 30。

當列數據項大小一致時應使用 binary。

當列數據項大小不一致時應使用 varbinary。

BLOB (binary large object),二進制大對象,是一個可以存儲二進制文件的容器。
在計算機中,BLOB常常是資料庫中用來存儲二進制文件的欄位類型。
BLOB是一個大文件,典型的BLOB是一張圖片或一個聲音文件,由於它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載或者存放到一個資料庫)。

大型對象
BLOB就是使用二進制保存數據。
如:保存點陣圖。
CLOB使用CHAR來保存數據。
如:保存XML文檔。

MySQL中,BLOB是個類型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,這幾個類型之間的唯一區別是在存儲文件的最大大小上不同。
MySQL的四種BLOB類型
類型 大小(單位:位元組)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 中等16M
LongBlob 最大 4G

4. 為什麼在資料庫建表時圖片欄位不能編輯(顯示binary)類型應該是image嗎怎麼才能把圖片插入表中

不能編輯的意思是什麼?修改裡面的某些內容嗎?binary屬於二進制方式的存在,你直接將對象寫到資料庫中就可以了,至於使用image還是binary存儲圖片都是可以的,這個不影響。

5. 資料庫中的binary類型有啥用,可以存放對象嗎

表面上這個存的是0101這樣的位元組,其實經過編碼解碼什麼都可以存了。
OO的對象,可以考慮先序列化為字串,再取字串的位元組序列來存了。取用的時候再做相反操作了。
不過好像沒有這種必要吧,OR之間轉換是是逃不掉的,你這是在為難自己

6. 請教:vb access資料庫中的binary類型可存放什麼范圍怎樣

哈哈,難得啊,這種類型確實用的人不多啊,我當時也是被整得很慘,研究了好久才摸到點門道,這里跟你分享下吧。
binary是二進制類型,長度可以定義的,你定義了多少個位元組就是就是多少位元組;
可以用來放些不太規則的數據,比如5個位元組、6個位元組的,你找不到對應的數據類型,但是又不願意用varchar來存放。實際上基本上binary的都可以改用varchar,除非資料庫設計者非得堅持這樣子,開發人員也沒辦法,對吧。
access里怎麼創建和選長度我也不知道,直接打開就能看到個ole對象,連內容都看不到,真是暈啊,但是確確實實可以通過編程用create語句創建出來這種欄位的。
而且有一點,一旦這個欄位類型是binary的,那這個欄位就不能作為主鍵了,access就是這樣的,沒處說理啊。如果業務要求這個欄位又非得是主鍵,那就只好整個表都不建主鍵了,靠應用程序來保證不會出現主鍵沖突的情況吧。
寫資料庫的時候,用個數組就行,像這樣
Dim
ckp(8)
As
Byte
ckp(0)
=1
ckp(1)
=&h10
ckp(2)
=0
ckp(3)
=0
......
With
rstTable
.AddNew
......
!mcheckpoint
=
ckp
......
.Update
End
With
讀資料庫的時候,定義個動態數組,取出來就是了
SQL="select
*
from
mytable"
Rs.Open
SQL,
cn,
adOpenKeyset,
adLockPessimistic
If
Rs.RecordCount
>
0
Then
'查到了
Dim
ckp()
As
Byte
If
IsNull(Rs!mcheckpoint)
Then
ckp
=
Rs!mcheckpoint
Else
ReDim
ckp(8)
End
If
.......
用where語句選擇的時候可以用等於號,後面用二進製表示
select
*
from
mytable
where
mCheckPoint
=
0x000000000000000001
如果這樣子不行的話,還可以嘗試下用like
select
*
from
mytable
where
mCheckPoint
like
0x000000000000000001
祝你好運啦!

7. ADO方式下,怎麼獲取sql server資料庫中Binary數據(初學者提問)

CString str1;//不要比如int型了,還是CString吧
str1=m_pRecordset->GetCollect("roles"); //欄位roles的數據保存到str1
//中,不過是一條數據

如果數據多條,可以用m_pRecordset->MoveNext(),來逐條讀取

8. 在MYSQL資料庫中,BINARY(M)中的M指的是什麼

在MySQL資料庫中,
BINARY是二進制字元串,M表示字元串的個數

9. 資料庫里的一個欄位是以binary存儲的,在後台調用查詢方法時頁面顯示的是了u亂碼,怎麼解決啊

binary類型是二進制啊,你後台查詢出結果後需要轉換二進制才能顯示出原來的字元。

10. 資料庫里binary類型的數據應該如何寫入和查看

//用下面的語句創建一個名為binary_test的表,其中包含了一個BINARY_FLOAT列和BINARY_DOUBLE列:

CREATETABLEbinary_test(
bin_floatBINARY_FLOAT,
bin_doubleBINARY_DOUBLE,
);

//注意:在SQL目錄中會發現一個名為oracle_10g_example.sql的腳本,這個腳本在store模式中創建了binary_test表,該腳本還可以執行INSERT語句,如果可以訪問一個Oracle10g的資料庫,就可以運行這個腳本。下面的這些語句時像binary_test表中添加一行;

INISERTINTObinary_test(
bin_float,bin_double
)VALUES(39.5f,15.7d
);

f和d分別用於表明一個數字是BINARY_FLOAT類型或者BINARY_DOUBLE類型的。

熱點內容
python程序設計第三版課後答案 發布:2025-07-03 03:58:08 瀏覽:211
socket上傳文件 發布:2025-07-03 03:57:24 瀏覽:893
安卓cleo腳本 發布:2025-07-03 03:41:26 瀏覽:245
編程器解讀 發布:2025-07-03 03:22:49 瀏覽:24
中國電信加密通信業務 發布:2025-07-03 03:06:00 瀏覽:521
腳本家的台詞 發布:2025-07-03 03:05:50 瀏覽:709
arcgisforpython 發布:2025-07-03 03:05:46 瀏覽:899
期計演算法 發布:2025-07-03 02:56:53 瀏覽:405
不同域訪問 發布:2025-07-03 02:49:05 瀏覽:819
多槽編程 發布:2025-07-03 02:47:42 瀏覽:920