bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries Tagged ‘MySQL’

在 MySQL 運用 Subquery 來 insert 資料

子查詢好像算是從 MySQL 5.x 版之後才開始有限度的支援,不過因為語法與主流不同所以還是要看官方文件來搞清楚。

因為幫人修改 ECShop 後台功能,要利用剛新增資料的自動編號欄位(action_id)所產生的值來作為之後進行新增資料的關聯欄位(parent_id)的值。

用程式處理當然相信大家都沒有問題的,但是可不可以用 MySQL 的子查詢功能來處理呢?

很簡單,具體的 SQL 語法如下:

1
2
3
4
5
6
7
INSERT INTO `ecs_admin_action`(parent_id,action_code)VALUES('0', 'currency');

INSERT INTO `ecs_admin_action`(parent_id,action_code)
SELECT action_id, 'currency_action1' FROM ecs_admin_action WHERE action_code = 'currency';

INSERT INTO `ecs_admin_action`(parent_id,action_code)
SELECT action_id, 'currency_action2' FROM ecs_admin_action WHERE action_code = 'currency';

詳細說明可參考 MySQL 官方文件

Leave a Comment

MySQL 效能調教工具

MySQL Performance Tuning Primer Script

This script takes information from “SHOW STATUS LIKE…” and “SHOW VARIABLES LIKE…”
to produce sane recomendations for tuning server variables.
It is compatable with all versions of MySQL 3.23 and higher (including 5.1).

Currently it handles recomendations for the following:

  • Slow Query Log
  • Max Connections
  • Worker Threads
  • Key Buffer
  • Query Cache
  • Sort Buffer
  • Joins
  • Temp Tables
  • Table (Open & Definition) Cache
  • Table Locking
  • Table Scans (read_buffer)
  • Innodb Status

網址 http://www.day32.com/MySQL/
下載 http://www.day32.com/MySQL/tuning-primer.sh

這是一個用 Linux shell script 寫出來的調教分析工具,在命令列環境中下載後的使用方法:

1
2
# chmod +x tuning-primer.sh
# ./tuning-primer.sh

經過一段時間的分析就會得到各項資訊與建議,特別是紅色的部分就是需要調整的參數。

Leave a Comment

如何得知 MySQL 資料庫的 Character Set and Collation ?

每個 MySQL 資料庫都各自有一個預設編碼 (database character set) 與一個預設定序 (database collation) 的設定值.
可以在建立資料庫時決定, 也可以透過 ALTER 來改變. 若是不確定設定值時可以透過下列方式取得:

下列指令可以查詢目前連線使用的資料庫設定值:

1
2
mysql> SHOW VARIABLES LIKE "character_set_database";
mysql> SHOW VARIABLES LIKE "collation_database";

若是有權限存取資料庫可以執行下列指令:

1
mysql> SHOW CREATE DATABASE DATABASE_NAME;

Leave a Comment

MySQL 編碼問題狀況分享

MySQL 的 Latin UTF8 編碼問題在網路上有很多人分享了詳細說明與轉換經驗就不再廢話

反正管理者在建置系統時,要做到的每個環節的編碼都親手檢查確認

因為碰到一個烏龍狀況就是環境設定與連線設定以及專案的程式碼都確認好了是 UTF8 沒錯
不過就是沒注意到在安裝流程的建立資料庫結構的 SQL Script 檔中
每個建立資料表卻都是這樣

create table xxx (xxx, ….) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

在 UTF8 作業環境中卻指定建立 Latin1 編碼的資料表
真是傻眼,只好先自行手工處理了。

Leave a Comment

執行 mysqlbinlog 出現 unknown variable ‘default-character-set=utf8’

執行的過程如下:

1
2
3
4
5
[root@www ~]# mysqlbinlog mysql-bin.000001
mysqlbinlog: unknown variable 'default-character-set=utf8'
[root@www ~]# mysqlbinlog
mysqlbinlog: unknown variable 'default-character-set=utf8'
[root@www ~]#

這是應該 mysqlbinlog 不支援 default-character-set 這個參數所導致
因為我在 my.cnf 中做了設定

1
2
[client]
default-character-set=utf8

這會讓所有的 Client Program 都被套用這個參數,所以碰上不支援的就掛了
不過可以改使用 loose-* 的參數前綴設定如下:

1
2
[client]
loose-default-character-set=utf8

這樣就可讓此參數變成非強制性的設定,程式也就可以執行了。
不過還是會出現警告訊息 Warning: mysqlbinlog: unknown variable ‘loose-default-character-set=utf8’
要是這樣也不能接受那就只有將 [client] 的 default-character-set 設定移除,讓 Client Program 自行打理了。

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期留言

  • 標籤

  • 彙整