1. 程式人生 > >mysql欄位型別和查詢語句資料型別的關係

mysql欄位型別和查詢語句資料型別的關係

mysql欄位型別和查詢語句資料型別的關係

實驗

根據資料庫儲存的欄位型別和查詢語句中的資料型別列出下表:

資料庫 查詢語句 結果
string string
string int
int string
int int
結果

素材表:

	+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| key       | varchar(50)      | NO   | MUL |         |                |
| name      | varchar(100)     | NO   |     |         |                |
| key_value | int(10) unsigned | NO   |     | 0       |                |
+-----------+------------------+------+-----+---------+----------------+
| id | key    | name      | key_value |
+----+--------+-----------+-----------+
|  2 | ddd    | zhanghua  |         3 |
|  6 | dsssss | mary      |         9 |
|  8 | dsssss | mary      |         0 |
|  9 | dsll   | 王華      |         0 |
| 10 | 7      | 詹姆斯    |       987 |
| 11 | 008    | 孩子      |        13 |
| 12 | 78uu   | zhanglei  |        13 |
| 13 | ytyy98 | fengxian  |       131 |
| 14 | y98ds  | lubu      |         0 |
| 15 | zore   | realfirst |         0 |
+----+--------+-----------+-----------+

結果
進行where查詢

  1. sting對string

     select * from role where(`key`='8');
     //查詢不到結果,只有當值為'008'的時候才能查詢到結果
     +----+-----+--------+
    | id | key | name   |
    +----+-----+--------+
    | 11 | 008 | 孩子   |
    +----+-----+--------+
    
  2. sting對int
    where子句中的資料型別為int的時候,mysql會自動把該行資料轉換成int進行對比。

    select * from role where (`key`=78);
    +----+------+----------+
    | id | key  | name     |
    +----+------+----------+
    | 12 | 78uu | zhanglei |
    +----+------+----------+
    
     select * from role where (`key`=007);
     +----+-----+-----------+
    | id | key | name      |
    +----+-----+-----------+
    | 10 | 7   | 詹姆斯    |
    +----+-----+-----------+
    
     select * from role where (`key`=0);
     +----+--------+----------+
    | id | key    | name     |
    +----+--------+----------+
    |  2 | ddd    | zhanghua |
    |  6 | dsssss | mary     |
    |  8 | dsssss | mary     |
    |  9 | dsll   | 王華     |
    | 13 | ytyy98 | fengxian |
    | 14 | y98ds  | lubu     |
    +----+--------+----------+
    
  3. int對sting
    資料庫中欄位為int型的時候,對於查詢語句中的資料會自動轉成int型進行查詢。比如key_value=“cscd”,會自動轉成key_value=0,key_value='13csdc’轉成key_value=13。

    select * from role where(key_value='13csdc');
    +----+------+----------+-----------+
    | id | key  | name     | key_value |
    +----+------+----------+-----------+
    | 11 | 008  | 孩子     |        13 |
    | 12 | 78uu | zhanglei |        13 |
    +----+------+----------+-----------+
    
     select * from role where(key_value='kjhkj');
     +----+--------+-----------+-----------+
    | id | key    | name      | key_value |
    +----+--------+-----------+-----------+
    |  8 | dsssss | mary      |         0 |
    |  9 | dsll   | 王華      |         0 |
    | 14 | y98ds  | lubu      |         0 |
    | 15 | zore   | realfirst |         0 |
    +----+--------+-----------+-----------+
    
  4. int對int
    不累述;

總結

  1. 當查詢語句裡的資料型別為int的時候,會自動把資料庫中的欄位值進行轉化成int型進行類比。
  2. 當資料庫中的欄位資料型別為int型的時候,會自動把查詢語句中的約束值轉成int型進行查詢。