利用修改sql_mode=NO_TABLE_OPTIONS收集建表語句,去掉engine和charset關鍵字

yhdmy發表於2017-10-30
一、描述
       平時我們有需求是要根據已有的表來生成建立表語句,直接檢視生成過程中會有ENGINE和CHARSET兩個關鍵字,其實我們大多數時候是不需要該引數,如果匯出後手工修改指令碼,實在是在麻煩了。在這裡我們可以使用sql_mode引數,修改為NO_TABLE_OPTIONS來進行收集。當然我們注意點是要修改當前session的變數,而不是全域性變數。下面是個小小的實驗,演示一下這個過程。


二、實驗
1.檢視sql_mode變數當然值

  1. mysql> show variables like 'sql_mode';
  2. +---------------+--------------------------------------------+
  3. | Variable_name | Value |
  4. +---------------+--------------------------------------------+
  5. | sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
  6. +---------------+--------------------------------------------+
  7. 1 row in set (0.01 sec)

2.檢視t1表的建立語句,帶有ENGINECHARSET兩個引數

  1. mysql> show create table t1;
  2. +-------+----------------------------------------------------------------------------------------------------------------------+
  3. | Table | Create Table |
  4. +-------+----------------------------------------------------------------------------------------------------------------------+
  5. | t1 | CREATE TABLE `t1` (
  6.   `id` int(11) DEFAULT NULL,
  7.   `name` char(20) DEFAULT NULL
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
  9. +-------+----------------------------------------------------------------------------------------------------------------------+
  10. 1 row in set (0.00 sec)

3.修改sql_mode為NO_TABLE_OPTIONS

  1. mysql> set session sql_mode='NO_TABLE_OPTIONS';
  2. Query OK, 0 rows affected (0.00 sec)

  3. mysql> show variables like '%sql_mode%';
  4. +---------------+------------------+
  5. | Variable_name | Value |
  6. +---------------+------------------+
  7. | sql_mode | NO_TABLE_OPTIONS |
  8. +---------------+------------------+
  9. 1 row in set (0.00 sec)

4.再次檢視建t1表SQL語句,沒有ENGINE和CHARSET兩個引數

  1. mysql> show create table t1;
  2. +-------+-----------------------------------------------------------------------------------+
  3. | Table | Create Table |
  4. +-------+-----------------------------------------------------------------------------------+
  5. | t1 | CREATE TABLE `t1` (
  6.   `id` int(11) DEFAULT NULL,
  7.   `name` char(20) DEFAULT NULL
  8. ) |
  9. +-------+-----------------------------------------------------------------------------------+
  10. 1 row in set (0.00 sec)
5.退出會話,使sql_mode引數恢復預設值


三、總結
        一個小小sql_mode的引數調整,可以省去我們遷移過程中,大量修改指令碼的操作。當然在MYSQL中sql_mode引數還有很對應的值,需要我們繼續學習與研究。MYSQL真是有意思,繼續學習中......

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26148431/viewspace-2146599/,如需轉載,請註明出處,否則將追究法律責任。

相關文章