mysql的數據類型與表約束

来源:https://www.cnblogs.com/panda-pandeyong/archive/2018/09/19/9671399.html
-Advertisement-
Play Games

數據類型 (詳細數據類型請參考:http://www.runoob.com/mysql/mysql-data-types.html) 數字 整型 tinyint int bigint 小數: float 在小數點後 位數比較短的情況下不精準; double 在小數點後 位數比較長的情況下不精準 字元 ...


數據類型

(詳細數據類型請參考:http://www.runoob.com/mysql/mysql-data-types.html)

 數字

  整型   tinyint  int  bigint

  小數: float  在小數點後 位數比較短的情況下不精準;

      double 在小數點後 位數比較長的情況下不精準

 

 字元串

  char (10):簡單粗暴,浪費空間,存取速度快

  varchar:精準;節省空間,存取速度較慢

 

 時間類型: 常用 datetime (年月日時分秒)

 枚舉類型與集合類型  enum(多選一)和set(多選多)

 

數值類型 

 整數數據類型:tinyint   smallint   mediumint   int   bigint

  作用:存儲年齡,等級,id,各種號碼等

    範圍都顧頭顧尾

========================================
        tinyint[(m)] [unsigned] [zerofill]

            小整數,數據類型用於保存一些範圍的整數數值範圍:
            有符號(預設):
                 範圍:-128127(顧頭顧尾)

          mysql> create table t1(x tinyint);
          mysql> insert into t1 values(-128);
無符號:
          創建表時定義記錄的字元為無符號類型,要使用unsigned           範圍: 0 ~
255(顧頭顧尾)

          mysql> create table t2(x tinyint unsigned);
          mysql> insert into t2 values(255);
        註意:若插入的數字範圍超過規定則會報錯.
PS: MySQL中無布爾值,使用tinyint(
1)構造。 ======================================== int[(m)][unsigned][zerofill] 整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -21474836482147483647 無符號:                   0 ~ 4294967295 ======================================== bigint[(m)][unsigned][zerofill] 大整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -92233720368547758089223372036854775807 無符號:                        0 ~ 18446744073709551615

 

  int類型後面的存儲是顯示寬度,而不是存儲寬度

  若未達到顯示的寬度,空出的位置則會被占用,超出顯示寬度的部分正常顯示,

  該寬度只是指定查詢結果的顯示寬度,與存儲範圍和類型包含的值的範圍無關.

  有符號和無符號的最大數字需要的顯示寬度均為10,而針對有符號的最小值

  則需要11位才能顯示完全,所以int類型預設的顯示寬度為11是非常合理的.

mysql> create table t3(id int(1) unsigned);
#插入255555記錄也是可以的
mysql> insert into t3 values(255555);
mysql> select * from t3;
+--------+
| id     |
+--------+
| 255555 |
+--------+
以上操作還不能夠驗證,再來一張表驗證用zerofill 用0填充 # zerofill 用0填充 mysql> create table t4(id int(5) unsigned zerofill); mysql> insert into t4 value(1); Query OK, 1 row affected (0.00 sec) #插入的記錄是1,但是顯示的寬度是00001 mysql> select * from t4; +-------+ | id | +-------+ | 00001 | +-------+ row in set (0.00 sec)

 

  浮點型:

  定點浮點型:DEC等同於DECIMAL

  浮點類型: FLOAT DOUBLE

  作用:儲存薪資,身高體重,體質參數等;

  語法:

-------------------------FLOAT-------------------
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
參數解釋:單精度浮點數(非準確小數值),M是全長,即顯示的寬度,D是小數點後個數。M最大值為255,D最大值為30
    unsigned定義為無符號型,常與zerofill搭配,若實際顯示寬度不滿足給定的寬度,則用0補充.
有符號:
           -3.402823466E+38 to -1.175494351E-38,
           1.175494351E-38 to 3.402823466E+38

無符號:
           1.175494351E-38 to 3.402823466E+38
精確度: 隨著小數的增多,精度變得不准確 ****

mysql> create table t3(x float(255,30));
Query OK,0 rows affected (0.03 sec)
mysql> create table t4(y float(255,30) unsigned zerofill);
Query OK, 0 rows affected (0.27 sec)
insert into t4 values(1.0111123111);
Query OK, 0 rows affected (0.14 sec);
mysql> desc t4;
mysql> select *from t4;
 -------------------------DOUBLE-----------------------
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

參數解釋: 雙精度浮點數(非準確小數值),M是全長,D是小數點後個數。M最大值為255,D最大值為30
有符號:
-1.7976931348623157E+308 to -2.2250738585072014E-308 2.2250738585072014E-308 to 1.7976931348623157E+308 無符號: 2.2250738585072014E-308 to 1.7976931348623157E+308 精確度:隨著小數的增多,精度比float要高,但也會變得不准確
mysql> create table t5(x double(255,30));
Query OK, 0 row affected (0.03 sec)
--------------------DECIMAL------------------------ decimal[(m[,d])] [unsigned] [zerofill] 參數解釋:準確的小數值,M是整數部分總個數(負號不算),D是小數點後個數。 M最大值為65,D最大值為30。 精確度:隨著小數的增多,精度始終準確 對於精確數值計算時需要用此類型 decaimal能夠存儲精確值的原因在於其內部按照字元串存儲。

mysql> create table t6(x decimal(65,30));
Query OK, 0 rows affected (0.00 sec)

 

  日期類型

  date time   datetime   timestamp   year

  作用:存儲用戶註冊時間,文章發佈時間,員工入職時間,出生時間,過期時間等.語法:

YEAR
            YYYY(1901~2155
      mysql> create table t6(year_t year);#無論year制定何種寬度,最後預設是year(4).       Query OK, 0 rows affected (0.03 sec)
      mysql> insert into t8 values
          -> (1905),
          -> (2018);
      Query OK, 2 rows affected (0.00 sec) #插入記錄成功
      Records: 2  Duplicates: 0  Warnings: 0



        DATE   
        YYYY
-MM-DD(1000-01-01~9999-12-31
TIME HH:MM:SS('-838:59:59'~'838:59:59'DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
    mysql> create table t7(d date,t time,dt datetime);#d為文件或id名,date為類型.
    Query OK, 0 rows affected (0.25 sec)
    
    

    註意:now()為mysql自帶函數,獲取當前類型指定的時間.

 

       TIMESTAMP(瞭解)

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)

mysql> create table t10(time timestamp);
Query OK, 0 rows affected (0.06 sec)

mysql> insert into t10 values();
Query OK, 1 row affected (0.00 sec)

mysql> insert into t10 values(null);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t10;
+------+
| time |
+------+
| NULL |
| NULL |
+------+

mysql> insert into t10 values(now());
Query OK, 1 row affected (0.01 sec)

mysql> select * from t10;
+---------------------+
| time |
+---------------------+
| 2018-06-09 09:44:48 |
+---------------------+
row in set (0.01 sec)

 

   datetime與timestamp的區別

在實際應用的很多場景中,MySQL的這兩種日期類型都能夠滿足我們的需要,存儲精度都為秒,但在某些情況下,會展現出他們各自的優劣。
下麵就來總結一下兩種日期類型的區別。

1.DATETIME的日期範圍是1001——9999年,TIMESTAMP的時間範圍是1970——2038年。

2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區。在mysql伺服器,
操作系統以及客戶端連接都有時區的設置。

3.DATETIME使用8位元組的存儲空間,TIMESTAMP的存儲空間為4位元組。因此,TIMESTAMP比DATETIME的空間利用率更高。

4.DATETIME的預設值為null;TIMESTAMP的欄位預設不為空(not null),預設值為當前時間(CURRENT_TIMESTAMP),
如果不做特殊處理,並且update語句中沒有指定該列的更新值,則預設更新為當前時間。

 

  註意事項:

  

============註意啦,註意啦,註意啦===========
#1. 單獨插入時間時,需要以字元串的形式,按照對應的格式插入
#2. 插入年份時,儘量使用4位值
#3. 插入兩位年份時,<=69,以20開頭,比如50,  結果2050      
                >=70,以19開頭,比如71,結果1971
 create table t12(y year);
 insert into t12 values  (50),(71);
 select * from t12;
+------+
| y    |
+------+
| 2050 |
| 1971 |
+------+

 

 字元類型

  詳情參考https://dev.mysql.com/doc/refman/5.7/en/char.html

    註意:char和varchar括弧內的參數指的都是字元的長度

    length():查看位元組數  char_length():查看字元數

 

  char類型: 定長 ,簡單粗暴 浪費空間 存取速度快

    字元長度範圍:0-255(一個中文是一個字元,utf8三個位元組)

  存儲:
        存儲char類型的值時,會往右填充空格來滿足寬度
        例如:指定寬度為10,存>10個字元則報錯,存<10個字元則用空格填充直到湊夠10個字元存儲
   檢索:
        在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,除非我們打開
    pad_char_to_full_length SQL模式
(設置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
查詢sql的預設模式:select @@sql_mode;)

 

  vachar類型:變長,精準 節省空間,存取速度較慢

字元長度範圍:0-65535
  (如果大於21845會提示用其他類型.mysql行最大限製為65535位元組,字元編碼為utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html) 存儲: varchar類型存儲數據的真實內容,不會用空格填充,如果'ab ',尾部的空格也會被存起來 強調:varchar類型會在真實數據前加1-2Bytes的首碼,該首碼用來表示真實數據的bytes位元組數(1-2Bytes最大表示65535個數字,正好符合mysql對row的最大位元組限制,即已經足夠使用) 如果真實的數據<255bytes則需要1Bytes的首碼(1Bytes=8bit 2**8最大表示的數字為255) 如果真實的數據>255bytes則需要2Bytes的首碼(2Bytes=16bit 2**16最大表示的數字為65535) 檢索:
     尾部有空格會保存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容

 

  char填充空格來達到規定的顯示寬度,但在查詢時不會顯示填充的部分,需要修

  改sql_mode讓其現出原形.

# 創建t1表,分別指明欄位x為char類型,欄位y為varchar類型
mysql> create table t1(x char(5),y varchar(4));
#此時規定char類型的顯示寬度為5,varchar顯示寬度為4.
Query OK, 0 rows affected (0.16 sec)

# char存放的是5個字元,而varchar存4個字元
mysql>  insert into t1 values('你誰啊 ','你誰呀 ');
Query OK, 1 row affected (0.01 sec)

# 在檢索時char卻不顯示填充的寬度部分,而varchar存了多少,就顯示多少
mysql> select x,char_length(x),y,char_length(y) from t1;
+-----------+----------------+------------+----------------+
| x         | char_length(x) | y          | char_length(y) |
+-----------+----------------+------------+----------------+
| 你瞅啥    |              3 | 你瞅啥     |              4 |
+-----------+----------------+------------+----------------+
row in set (0.02 sec)

 #略施小計,讓char現原形
 mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
Query OK, 0 rows affected (0.00 sec)

#查看當前mysql的mode模式
mysql> select @@sql_mode;
+-------------------------+
| @@sql_mode              |
+-------------------------+
| PAD_CHAR_TO_FULL_LENGTH |
+-------------------------+
row in set (0.00 sec)

顯示出本有的寬度
mysql> select x,char_length(x) y,char_length(y) from t1;
+-------------+------+----------------+
| x           | y    | char_length(y) |
+-------------+------+----------------+
| 你瞅啥      |    5 |              4 |
+-------------+------+----------------+
row in set (0.00 sec)

 查看位元組數
char類型:3個中文字元+2個空格=11Bytes
  #三個中文字元為9個位元組,之前規定的顯示寬度為5,所以要填充倆空格. varchar類型:3個中文字元
+1個空格=10Bytes mysql> select x,length(x),y,length(y) from t1; +-------------+-----------+------------+-----------+ | x | length(x) | y | length(y) | +-------------+-----------+------------+-----------+ | 你誰啊 | 11 | 你誰呀 | 10 | +-------------+-----------+------------+-----------+ row in set (0.02 sec)

 

 補充:

#常用字元串系列:char與varchar
註:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

#其他字元串系列(效率:char>varchar>text)
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB 
BINARY系列 BINARY VARBINARY

text:text數據類型用於保存變長的大字元串,可以組多到65535 (2**161)個字元。
mediumtext:A TEXT column with a maximum length of 16,777,215 (2**241) characters.
longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**321) characters.
View Code

 

 枚舉類型和集合類型

  欄位的值只能在給定範圍中選擇,如單選框,多選框

  enum 單選 只能在給定的範圍內選一個值,如性別 sex 男 male/女 female

  set 多選 在給定的範圍內可以選擇一個或一個以上的值(愛好1,愛好2...)

 

mysql> create table consumer(
    -> id int,
    -> name varchar(50),
    -> sex enum('male','female','other'),
    -> level enum('vip1','vip2','vip3','vip4'),#在指定範圍內,多選一
    -> fav set('play','music','read','study') #在指定範圍內,多選多
    -> );
Query OK, 0 rows affected (0.03 sec)


mysql> insert into consumer values
    -> (1,'趙雲','male','vip2','read,study'),
    -> (2,'趙雲2','other','vip4','play');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from consumer;
+------+---------+-------+-------+------------+
| id   | name    | sex   | level | fav        |
+------+---------+-------+-------+------------+
|    1 | 趙雲    | male  | vip2  | read,study |
|    2 | 趙雲2   | other | vip4  | play       |
+------+---------+-------+-------+------------+
rows in set (0.00 sec)

 

 

完整性約束

  簡述

  約束條件與數據類型的寬度一樣,都是可選參數

  作用: 用於保證數據完整性和一致性

  主要分為:

PRIMARY KEY (PK)    #標識該欄位為該表的主鍵,可以唯一的標識記錄
FOREIGN KEY (FK)    #標識該欄位為該表的外鍵
NOT NULL    #標識該欄位不能為空
UNIQUE KEY (UK)    #標識該欄位的值是唯一的
AUTO_INCREMENT    #標識該欄位的值自動增長(整數類型,而且為主鍵)
DEFAULT    #為該欄位設置預設值

UNSIGNED #無符號
ZEROFILL #使用0填充

  說明:

#1. 是否允許為空,預設NULL,可設置NOT NULL,欄位不允許為空,必須賦值
#2. 欄位是否有預設值,預設的預設值是NULL,如果插入記錄時不給欄位賦值,此欄位使用預設值
sex enum('male','female') not null default 'male'

#必須為正值(無符號) 不允許為空 預設是20
age int unsigned NOT NULL default 20 
# 3. 是否是key
主鍵 primary key
外鍵 foreign key
索引 (index,unique...)

 

   not null與default

  是否可空 ,null表示空 , 非字元串

  not null 不可空  null 可空(一般不寫出來)

  預設值,創建列時可以指定預設值,當插入數據時如果未主動設置,則自動添

  加預設值.

 

預設為空示例

mysql> create table t11(id int);# id欄位預設可以為空
Query OK, 0 rows affected (0.05 sec)

mysql> desc t11;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES   |          | NULL    |       |
+-------+---------+------+-----+---------+-------+
row in set (0.03 sec)
mysql> insert into t11 values(); #給t11表插一個空的值
Query OK, 1 row affected (0.00 sec)

#查詢結果如下
mysql> select * from t11;
+------+
| id   |
+------+
| NULL |
+------+
row in set (0.00 sec)



不為空示例

mysql> create table t12(id int not null);#設置欄位id不為空
Query OK, 0 rows affected (0.03 sec)

mysql> desc t12;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
row in set (0.01 sec)

mysql> insert into t12 values();#不能插入空
ERROR 1364 (HY000): Field 'id' doesn't have a default value




若為空,則設置預設值
第一種情況
mysql> create table t13(id int default 1);#若為空欄位,則設置id欄位預設值為1.
Query OK, 0 rows affected (0.03 sec)

mysql> desc t13;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |           | 1              |              |
+-------+---------+------+-----+---------+-------+
row in set (0.01 sec)

mysql> insert into t13 values();#為空欄位,預設插入default指定值 1.
Query OK, 1 row affected (0.00 sec)

mysql> select * from t13;
+------+
| id   |
+------+
|    1  |
+------+
row in set (0.00 sec)


# 第二種情況
mysql> create table t14(id int not null default 2);#同上一種情況,只是寫上了not null.
Query OK, 0 rows affected (0.02 sec)

mysql> desc t14;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO      |         | 2               |             |
+-------+---------+------+-----+---------+-------+
row in set (0.01 sec)

mysql> select * from t14;
+----+
| id |
+----+
|  2 |
+----+
row in set (0.00 sec)

設置id欄位有預設值後,則無論id欄位是null還是not null,都可以插入空,插入空預設填入default指定的預設值
View Code

 

  unique  單列唯一

  假如:創建一個公司部門表,每個部門只能創建一個,但是在操作中卻能創建

  多個,這是不符合邏輯的.那麼就可以使用unique,來對公司部門的欄位進行

  約束設置.

#第一種創建unique的方式
create table department(
    id int unique,
    name char(10) unique  #若後面插入的名字重覆,則會報錯.
);
insert into department values(1,'it'),(2,'sale');


#第二種創建unique的方式
create table department(
    id int,
    name char(10) ,
    unique(id),
    unique(name)
);
insert into department values(1,'it'),(2,'sale');

 

  聯合唯一: 

  只要被聯合的欄位有一列不同,則符合聯合唯一的約束.

 

   primary key (主鍵)

  一個表中可以單列做主鍵 或多列做主鍵(符合主鍵)

  約束:等價於 not null unique,欄位的值不為空且唯一

  存儲引擎預設是 innodb:對於innodb存儲來說,一張表必須有一個主鍵.

  單列主鍵

# 創建t14表,為id欄位設置主鍵,唯一的不同的記錄
create table t14(
    id int primary key,
    name char(16)
);

insert into t14 values
(1,'xiaoma'),
(2,'xiaohong');

mysql> insert into t14 values(2,'wxxx');
ERROR 1062 (23000): Duplicate entry '6' for key 'PRIMARY'


#   not null + unique,相當於給id設置primary key
create table t15(
    id int not null unique,
    name char(16)
);
mysql> create table t15(
    -> id int not null unique,
    -> name char(16)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc t15;
+-------+----------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id        | 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一. 概述 linux安全系統的核心是用戶賬戶。 創建用戶時會分配用戶ID(UID)。 UID是唯一的,但在登錄系統時不是用UID,而是用登錄名。在講文件許可權之之前,先瞭解下linux是怎樣處理用戶賬戶的。以及用戶賬戶需要的文件和工具,這樣處理文件許可權問題時,就知道如何使用它們了。 1.1 /etc ...
  • 基於Keepalived+Varnish+Nginx實現的高可用LAMP架構 註意:各節點的時間需要同步(ntpdate ntp1.aliyun.com),關閉firewalld(systemctl stop firewalld.service,systemctl disable firewalld ...
  • 使用parted和resize2fs擴容GPT分區表格式 rootfs ...
  • 在做的項目在nginx下訪問緩衝時間過長,明顯比apache下訪問蠻11倍有餘, 解決辦法: 1增加nginx的upstream,其中upstream中為php-cgi的地址; 2利用nginx作為反向代理,分支法解決併發量; 3增加php-cgi的進程數,(這裡會受到機器資源的限制,因此,也並不能 ...
  • 環境搭建 無人值守搭建 LNMP一鍵安裝包無人值守命令生成器 支持LAMP/LNMP/LNMPA的一鍵搭建,根據自己的需求配置好之後點擊生成就會生成腳本,然後只需簡單的複製粘貼,再去喝杯咖啡回來後即可享受已經生成好的環境。 當然前提是你要把虛擬機的網路配置好吆~一定要能夠和外網連通哦(づ ̄ 3 ̄)づ ...
  • 首先要明確一點的是502是怎麼出現的,為什麼會出現502呢?一般而言,出現502的錯誤是因為php-cgi連接數不夠導致的。舉個例子:php-cgi開10個進程,前端發20個請求,每個請求的腳本都sleep100s,那麼必然有至多10個請求會出現502錯誤。因此,出現502是因為php進程不夠用了, ...
  • ->系統當前狀態腳本 腳本內容如下: 實現效果如下: ->查看系統當前記憶體狀態 實現效果如下: [root@jumpserver-70 scripts]# sh mem.sh Memory Is OK 9% ->查看ip 是否暢通 ->創建用戶並設置密碼 ->安裝nginx->查看狀態 ->ngin ...
  • 1 首先設置你購買的雲盤配置,例如cpu,記憶體,磁碟類型、容量,網路類型等 2.阿裡雲可以使用瀏覽器進行遠程shell連接 首先需要輸入遠程密碼,第一次連接的時候會提示 一定要牢記 輸入密碼後進入shell界面 比較坑的是,假如你在購買阿裡雲伺服器時設置了初始root密碼,第一次登陸不起作用,提示l ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...