日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php varbinary,MySQL 数据类型binary和varbinary的简单示例

發布時間:2023/12/10 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php varbinary,MySQL 数据类型binary和varbinary的简单示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要為大家詳細介紹了MySQL 數據類型binary和varbinary的簡單示例,具有一定的參考價值,可以用來參考一下。

感興趣的小伙伴,下面一起跟隨512筆記的小編兩巴掌來看看吧!

前言

BINARY和VARBINARY與 CHAR和VARCHAR類型有點類似,不同的是BINARY和VARBINARY存儲的是二進制的字符串,而非字符型字符串。也就是說,BINARY和VARBINARY沒有字符集的概念,對其排序和比較都是按照二進制值進行對比。

BINARY(N)和VARBINARY(N)中的N指的是字節長度,而CHAR(N)和VARCHAR(N)中N指的是的字符長度。對于BINARY(10) ,其可存儲的字節固定為10,而對于CHAR(10) ,其可存儲的字節視字符集的情況而定。

我們來看下面的例子。

mysql> CREATE TABLE t (

-> a BINARY(1)

-> )ENGINE=InnoDB CHARSET=GBK;

Query OK, 0 rows affected (0.02 sec)

mysql> SET NAMES GBK;

Query OK, 0 rows affected (0.00 sec)

MySQL> INSERT INTO t SELECT '我';

Query OK, 1 row affected, 1 warning (0.01 sec)

Records: 1 Duplicates: 0 Warnings: 1

mysql> SHOW WARNINGS\G;

*************************** 1. row ***************************

Level: Warning

Code: 1265

Message: Data truncated for column 'a' at row 1

1 row in set (0.00 sec)

mysql> SELECT a,HEX(a) FROM t\G;

*************************** 1. row ***************************

a:

HEX(a): CE

表t包含一個類型為BINARY(1)的列,因為BINARY(N)中N代表字節,而gbk字符集中的中文字符“我”需要占用2字節,所以在插入時給出警告,提示字符被截斷。如果SQL_MODE為嚴格模式,則會直接報錯。查看表t的內容,則可發現a中只存儲了字符“我”的前一個字節,后一個字節被截斷了。如果表t的a列中字符的類型為CHAR類型,則完全不會有上述問題,例如:

mysql> CREATE TABLE t (

-> a CHAR(1)

-> )ENGINE=InnoDB CHARSET=GBK;

Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO t SELECT '我';

Query OK, 1 row affected, 1 warning (0.01 sec)

Records: 1 Duplicates: 0 Warnings: 0

mysql> SELECT a,HEX(a) FROM t\G;

*************************** 1. row ***************************

a: 我

HEX(a): CED2

1 row in set (0.00 sec)

BINARY和VARBINARY對比CHAR和VARCHAR,第一個不同之處就是BINARY(N)和VARBINARY(N)中的N值代表的是字節數,而非字符長度;第二個不同點是,CHAR和VARCHAR在進行字符比較時,比較的只是字符本身存儲的字符,忽略字符后的填充字符,而對于BINARY和VARBINARY來說,由于是按照二進制值來進行比較的,因此結果會非常不同,例如:

mysql> SELECT

-> HEX('a'),

-> HEX('a '),

-> 'a'='a '\G;

*************************** 1. row ***************************

HEX('a'): 61

HEX('a '): 612020

'a'='a ': 1

1 row in set (0.00 sec)

mysql> SELECT

-> HEX(BINARY('a')),

-> HEX(BINARY('a ')),

-> BINARY('a')= BINARY('a ')\G;

*************************** 1. row ***************************

HEX(BINARY('a')): 61

HEX(BINARY('a ')): 612020

BINARY('a')= BINARY('a '): 0

1 row in set (0.00 sec)

對于CHAR和VARCHAR來說,比較的是字符值,因此第一個比較的返回值是1。對于BINARY和VARBINARY來說,比較的是二進制的值,“a”的十六進制為61,“a? ”的十六進制為612020,顯然不同,因此第二個比較的返回值為0。

第三個不同的是,對于BINARY字符串,其填充字符是0x00,而CHAR的填充字符為0x20。可能是因為BINARY的比較需要,0x00顯然是比較的最小字符,示例如下:

mysql> CREATE TABLE t ( a BINARY(3));

Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t SELECT 'a';

Query OK, 1 row affected (0.00 sec)

Records: 1 Duplicates: 0 Warnings: 0

mysql> SELECT a,HEX(a) FROM t\G;

*************************** 1. row ***************************

a: a

HEX(a): 610000

1 row in set (0.00 sec)

注:關于MySQL 數據類型binary和varbinary的簡單示例的內容就先介紹到這里,更多相關文章的可以留意512筆記的其他信息。

關鍵詞:數據類型,binary,varbinary

總結

以上是生活随笔為你收集整理的php varbinary,MySQL 数据类型binary和varbinary的简单示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。