Archive for the ‘MySQL’ Category

Filed Under (MySQL) by a-wei on 25-12-2006

前陣子發現 mysql 資料庫內有數個檔案異常肥大!

檔名是 xxx-bin.000001~4

這是 mysql 的 二元 log 檔.

要刪除它可別直接 rm.

而是得透過 mysql 的刪除機制刪除比較妥當.

搜尋了一下 Google. 得到刪除的方法!

1. mysql> show master logs;-> 顯現目前的 log 檔有哪些。

2. PURGE { MASTER|BINARY } LOGS TO ‘log_name’ -> 要把現在記錄的 log 丟到那個檔案名稱。
mysql>PURGE MASTER LOGS TO ‘xxx-bin.004′;

3. PURGE { MASTER|BINARY } LOGS BEFORE ‘date’ -> 要從那個日期之前。
mysql>PURGE MASTER LOGS BEFORE ‘2006-12-25 12:00:00′;



Filed Under (MySQL) by a-wei on 18-12-2006

Pear 提供了很多 PHP 的函式庫,今天剛好有個系統是使用 Pear 連接 mysql 資料庫。

結果中文卻亂碼?

解法就是 .. 搜尋一下 pear 目錄的路徑

$whereis pear

正常的話,位置應該會是在 /usr/share/pear

之後,進入 DB 目錄。

編輯 mysql.php

在第 243 行新增 @mysql_query(’set names utf8′);

哈!

中文立即顯現!

頌.



Filed Under (MySQL) by a-wei on 13-11-2006

之前都是在 Linux 平台上搭配 php 使用 mysql .

這次 chris 問我,要在 windows 上使用 myODBC 連結 mysql ,中文都會亂碼 .

這也折騰了好一陣子,終於破解 .

伺服端的設定都可以比照前面的文章,重點在於 MyODBC 的設定.

myODBC init statement

在 Initial statement 的地方輸入: set names big5

這樣就行了!



Filed Under (MySQL) by a-wei on 23-08-2006

話說在舊站的資料上,有紀錄過這麼一篇 .. 然而今天在安裝 MySQL 5.0.x 的時候,卻發現怎麼沒辦法完全 UTF8..
想說在 Google 上找看看,能否找到之前留存的資料,卻是百尋不遍 ..

有找到相關的設定方式,但比起自己印象中的設定方式,好像又不太一樣 ..

結果 .. 答案卻是遠在天邊,近在眼前 .. 就在自己管理的一部機器上可以找到相關的設定.

設定方式:

1. 開啟 /etc/my.cnf

找到這兩段,並加入以下的字串.

a. [client]
default-character-set = utf8

b. [mysqld]
default-character-set = utf8
init-connect = ‘SET NAMES UTF8′

編輯完後存檔,把 mysql 重啟.

之後進入 mysql 的查詢

mysql> show variables;

就可以看到上半段的資料是這樣 (mysql 4.1.x)

| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |

當然,照剛剛那樣設定是一定會呈現如上所述的結果 ..

如果有還參有 latin1 ,那應該是你的系統可能參有舊版的 mysql .

把新版 mysql 目錄內的 mysql ,如新版的程式放在 /usr/local/mysql/bin/mysql

把它 copy 至 /usr/bin

覆蓋掉舊版的 .. 這樣就行了。

另外這是 5.0.x 的結果

| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |

差異是 5.0.x 多了個 character_set_filesystem ,而且值是 binary .. 這就可以不理會它了。



Filed Under (MySQL) by a-wei on 09-08-2006

mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

Alternatively, use UPDATE and FLUSH PRIVILEGES:

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;



Filed Under (MySQL) by a-wei on 09-08-2006

mysql 4.1.10 與 coldfusion mx 7 中文資料讀寫的方法:

Part I : mysql
1. 在建立 mysql 資料庫的時候「校對」選擇 「utf-8 generic ci」。
2. 建立 table 的時候 「校對」選擇 「utf-8 generic ci」。
3. 在欄位的地方 「校對」選擇 「utf-8 generic ci」。
4. 用 phpadmin 2.6.2 試著新增一筆資料,看中文資料有否正常寫入, 應該沒問題才是。

Part II: Coldfusion MX 7
1. 內建的 mysql jdbc 是舊版的要上網站將新的版本放在
/opt/coldfuisonmx7/runtime/servers/lib

2. 重新啟動 Coldfusionmx7 -> service coldfusionmx7 restart

Part III: mysql JDBC
以下的DB是我要連線的資料庫名稱。
1. Add New Data Source , Driver 的部分選擇 Other
2. 在 JDBC URL 的地方填入: jdbc:mysql://localhost:3306/DB?useUnicode=true&characterEncoding=utf8
在 Driver Class 的地方填入:com.mysql.jdbc.Driver
3. 填入連線帳號、密碼。
4. 按下 submit 之後即可知資料庫連線正不正常。

Part IV: 網頁編輯 以 Dream Weaver 2004 MX 為例
1. 判定編輯器所編輯出來的文件是以什麼編碼儲存的,如果是 UTF-8 就不會有問題了,Dream Weaver 就是預設 utf-8。 可以用 FireFox 瀏覽器 檢視頁面的編碼以及標頭的資訊。
2. 文件內文加入

這樣就大功告成了



Filed Under (MySQL) by a-wei on 16-05-2006

Perl 的 MySQL UTF8 破解法 ..

my $dbh = DBI->connect("dbi:mysql:test", "xxx", "xxx");
# there are posts on dbi-user as to whether both or either of
# the following should be set
$dbh->do("set character set utf8");

檔案位於 /usr/local/sbin/amavisd
第 13516 行,位於 sub connect_to_sql {} 內。

有此需求的原因在於 ... 我的伺服器使用了 amavisd-new 這個郵件掃瞄套件 ..
它有個功能是可以將郵件的進出紀錄在 mysql 中.
而郵件主旨不乏會有中文 .. 而且我專為 amavisd-new 所建立的資料庫格式是 utf8 ..
自然而然亂碼的問題就會浮現 ..
在前面的文章有破解過 SMF 中的 php 與 mysql 的 UTF8 ... 而此問題就是 Perl 與 MySQL 的 UTF8.
Google 真是太好用了 .. 輸入關鍵字 .. Perl mysql utf8 ..

快速 review 幾篇內容 ..專找 perl 在資料庫連線部分的內容 .. 要找的答案就在其中 ..


Filed Under (MySQL) by a-wei on 31-03-2006

相信 MySQL 的編碼對很多人來說 … 一直是個相當令人頭痛的問題 … 今天所要做的介紹是如何把資料庫的資料, 由 latin1 轉成 utf8..

一般 .. MySQL 裝起來後(用 rpm 安裝) ,系統的預設編碼是 latin1.

而很多人在安裝一些網頁的系統時,如 wordpress、LifeType、phpBB … 等等,都會選擇 utf8 。

這時 … 系統一樣可以正常運作 … 只是當用 phpmyadmin 進入管理資料庫時,就會發現 .. 怎麼中文字的部分都變成了歪七扭八 ..

或者一些鬼畫符的文字。如:凡事先從工作講起

此現象就是 utf8 的文字以 latin1形式儲存,phpmyadmin 以 utf8 的資料讀取方式讀取 … 讀出來的資料就是這種鬼畫符…><。

若要解決 phpmyadmin 讀出的鬼畫符 … 有兩個方法:

1. 進入 phpmyadmin 內一個名為 libraries 的子目錄 .. 編輯 select_lang.lib.php. 找到 $mysql_charset_map 這一段下方 ..

‘utf-8′ => ‘utf8′,
把它改成

‘utf-8′ => ‘latin1′,

然後存檔 … 這時候就可以發現原先的鬼畫符 … 這時候又都正常了.

2. 把資料庫的編碼轉成 utf8 …

步驟:

a. 把資料庫 dump 出來

mysqldump -u xxx -p database > database.sql –default-character-set=latin1

這時候 dump 出來的 database.sql 是 latin1 的檔案格式,然而是 utf8 的文字資料,因此這時若用 vi 開檔看它 …

還是會發現中文字是鬼畫符 … 這時不要被眼前的假象所騙 … 以為自己做錯 .. 幾接著做下一步驟。

b. 把 dump 出來的 database.sql 下載回去 .. 用 emEditor(網路上可免費下載,是個支援 utf-8 的編輯器)把 database.sql 打開,

它可以正常識別 utf8 的文字 ..用取代的功能,把 latin1 都取代成 utf8 ,之後直接另存新檔 .. 這時把檔案類型設定儲存成 UTF-8。

c. 再把 database-utf8.sql 上傳到 server .. 這時我們用 vi 開啟它 .. 就可以看見是正常的中文字 .. 這就表示檔案沒問題囉。

d. 把檔案匯入資料庫

mysql database < database-utf8.sql -u xxx -p --default-character-set=utf8
如果資料量不是很大 … 那麼很快就可以完成這個步驟 .. 這時候若沒有錯誤訊息出現 .. 那麼恭喜你 ..

你已經完成了資料庫轉換的工作了。如果有錯誤訊息出現 .. 主要有兩個情形 ..

1. 文件檔內的中文字,用 vi 看是亂碼 ..文件檔的格式不是 utf-8。

2. 匯入的時候漏掉指定採用 utf8 的資料編碼匯入。

以上的作業是在 資料庫系統都是處於 latin1 的環境底下,也就是沒有在 my.cnf 指定 default-character-set=utf8。