MySQL 提供豐富的內建函數,善用可大幅簡化開發與運維工作。本文彙整高頻實用技巧。
INET_ATON('192.168.1.1') → 3232235777(IP 轉無號整數)INET_NTOA(3232235777) → '192.168.1.1'(整數轉 IP)INT UNSIGNED(4 位元組)即可容納 IPv4,無需 BIGINT。FORMAT(12345, 0) → '12,345'(千分位分隔)FORMAT(12345, 2) → '12,345.00'(保留兩位小數)SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
-- 結果範例:2004 3rd August 03:35:48 2004
-- 需 Perl DBI/DBD::mysql 模組
mysql_convert_table_format --user=root --password='xx' --type=myisam test_db table_name
ALTER TABLE tb_name CHANGE old_col new_col 定義...;
SELECT @var1 := a1 + a2 AS a_sum,
@var2 := b1 + b2 AS b_sum,
@var1 + @var2 AS total_sum
FROM test_table;
UPDATE rule SET enable = IF(enable = '0', '1', '0') WHERE ...;
-- enable 為 ENUM('0','1') NOT NULL DEFAULT '0'
SET GLOBAL wait_timeout = 10;
SET GLOBAL interactive_timeout = 10;
-- 10 秒無查詢自動斷開 sleep 連線
export MYSQL_PS1="(\u:\h:)\d> "
-- 登入後顯示:(root:localhost:)db_name>
| 引擎 | 方法 |
|---|---|
| MyISAM | OPTIMIZE TABLE 或 mysqldump 重導入 |
| InnoDB | ALTER TABLE t ENGINE=InnoDB 或 mysqldump 重導入 |
VARCHAR 尾部空格不再截斷。DECIMAL 欄位升級到 5.0.6+ 可能崩潰,需重建。USING 遵循 SQL:2003 標準,結果欄位數與順序可能改變。