C/C++ 學習筆記 002 – Dev C + MySQL 綜合使用經驗

前言

這是在 Windows 下的 Dev C + MySQL 的一些使用經驗,當然其中 MySQL 的經驗不只是適用於 Dev C ,其他平台的 MySQL 當然也適用。

如果你想知道如何在 Dev C 下設定好關於  MSQL 的編譯與連結,請參考網頁:

Dev C++ 參數 main by kowala’s home

經驗一

Dev C 內要使用 MySQL 時一定要加 #include <winsock.h>  ,不然會出現錯誤

不能只有 #include <stdio.h> 、 #include <mysql.h>

錯誤訊席會在編譯時,表示:

  • 268 C:\Dev-Cpp\include\mysql_com.h syntax error before “SOCKET”
  • 268 C:\Dev-Cpp\include\mysql_com.h [Warning] no semicolon at end of struct or union
  • 304 C:\Dev-Cpp\include\mysql_com.h syntax error before ‘}’ token
  • 304 C:\Dev-Cpp\include\mysql_com.h [Warning] type defaults to `int’ in declaration of `NET’

…類似這種訊息。

經驗二、

為這個搞好久, MySQL 雖然支援大筆資料寫入,例如、mediumtext 可以寫入千萬個字元, 甚至 longtext寫入十億個,但是在 MySQL 的基本設定檔 my.cnf (my.ini) 裡頭,有一個值叫做  max_allowed_packet,這個值決定了你的 SQL 語句一次動作內最大的操作量。

所以若寫入的字元的數量超過此值,就一定無法寫入,舉例來說,若你想把系統的一個log檔寫入某個型態為 longtext 的欄位,可該文字檔 是 10MB 的話,則max_allowed_packet 至少要大於 10M。

設定檔案的名稱,Linux 下是my.cnf , Windows 是 my.ini  

經驗三、

承上經驗二,設定檔內,預設沒有max_allowed_packet參數,請自己加上

max_allowed_packet = 128M  這樣的一行,結尾不需符號。

經驗四、

別傻傻的用 C 去搞字串問題,先找 MySQL 的操作語句有沒有可用的!XDDD

例如、 %

  • SELECT * FROM 資料庫 WHERE 欄位 LIKE “A%”  :列出查詢結果中哪些是 A 開頭
  • SELECT * FROM 資料庫 WHERE 欄位 LIKE “A___Z”  :列出查詢結果中哪些是 A 開頭,Z結尾,中間包含3個字元(請注意這是三個底線)

注意!以上不是正規表示式,是 MySQL 的操作語句裡面的萬用字元規則。雖然 MySQL 也支援正規表示式啦!

請加 RGEXP 關鍵字,例如

  • SELECT * FROM 資料庫 WHERE 欄位 RGEXP  “[a-z]+” ,找出零或一個小寫英文字母

參考網頁: MySQL:SELECT WHERE LIKE用法  by 陸小K

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料