目前分類:資料庫 (17)

瀏覽方式: 標題列表 簡短摘要

閱讀此文章前建議請先看這篇【資料庫】從 MySQL 4.0 Big5 編碼資料庫升級到 MySQL 4.1 Big5 編碼資料庫

上一篇是在說如何將 4.0 以 Big5 編碼的 DB 轉匯到 4.1 同樣以 Big5 編碼的方法

但是用 UTF-8 編碼是現在的趨勢了,也比較不會有字元爛掉的問題

這一篇教學算是承上,原則上 MySQL 的環境都不變

首先我們一樣要先新建資料庫,這次就要改用 UTF-8 來編碼

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

近來協助老師將以前的網站移轉到新機器,先描述一下歷史故事

以往升級 MySQL 時就是直接把 MySQL DB 內實體檔案 copy 到對應的目錄內,沒有用 phpMyAdmin or mysqldump 這二種方法

而這種方法在 MySQL 3.0 & MySQL 4.0 是 OK 的,但是從 4.1 以後就不能這樣做了

然而後來升級至 4.1 之後,從 phpMyAdmin 來看資料怎麼看都是亂碼,為了解決這問題找了無數網站的教學

此篇是在教學該怎麼把原本 MySQL 4.0 以 Big5 編碼的 Database 也可以成功倒入至 MySQL 4.1 以 Big5 編碼的 Database

我的環境是 FreeBSD 8.1 + MySQL 4.1.25 + phpMyAdmin 2.11.11.1

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

# mysql -u root -p

# use Database_Name

# repair table Table_Name;

 

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

前陣子 Daydream 問我說 MySQL 在選擇連線校對時,utf8_general_ciutf8_unicode_ci 哪個好?差別在哪裡。

一直以來我都是用 utf8_general_ci 來做校對,因此也回了他用 utf8_general_ci 較好。

Google 了一下,找到這篇 mysql 裡 utf8_general_ci 跟 utf8_unicode_ci 連線校對的差異 文章,就解答了我們的疑惑了。

簡單來說,若在做資料庫編碼轉換時, utf8_general_ci 速度較快而 utf8_unicode_ci 較正確,這是二者最大的差異!

其實對於我們常用的中文 ( multibyte ) 選擇這二種都行,效果是一樣的,但若碰到其它的語言可就不一定了,因此能用 utf8_unicode_ci 來做為預設的編碼還是較為妥當的!官網在 MySQL Manual 9.11.1 Unicode Character Sets 也做了說明,有興趣的人可以再參考一下

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

參考藍小熊日記的說明,今天成功設定回來了,此篇記錄一下。

首先將 mysql結束掉:

Linux : service mysqld stop

FreeBSD : ps ax ( 找到 mysql ID 後 ),再 kill -9 MySQL-ID

再用以下的指令啟動並進入 MySQL

# mysqld_safe -u root --skip-grant-tables &

# mysql

這樣就可以進入 MySQL

mysql > use mysql;
mysql > UPDATE user SET password=password('新的密碼') where user='root';
mysql > FLUSH PRIVILEGES;

接下來再一次啟動系統 or 啟動 MySQL 就大功告成了!

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

一般來說,若從 phpMyAdmin Dump 出來的 SQL 太大時,透過 phpMyAdmin 在倒回去時往往會發生逾時或是超出檔案大小的限制 ...

雖然說可以去修改 php.ini 來改善此問題,但並不是每個人都是系統的管理者,有可能只是租用空間的使用者而已,遇到這種情形就一籌莫展了。我過去還原資料庫都是用暴力法,直接把整個實體資料庫「搬過去」,即使再大都不會有問題,但這只挶限是系統管理者的操作方式。

不過就是有好人寫出了 bigdump 這個好東西,使用方式很簡單。打開 bigdump.php 後,去修改這幾行
$db_server = 'localhost';
$db_name = '資料庫名稱';
$db_username = '使用者名稱';
$db_password = '使用者密碼';
$filename = '要備份的 sql';
$linespersession = 3000; // 指每次還原幾筆
$delaypersession = 5000; // 中間間隔要休息幾秒,此例是 5 秒鍾
$db_connection_charset = ''; // 編碼使用的字元是哪一種
改好之後,把 sql 檔案和這個 bigdump.php 一起上傳到 phpmyadmin 的目錄下,再直接執行它囉!

[1] 阿修的部落格 - BigDump─MySQL資料匯入好幫手

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

這是從爪哇豆的秘密(JAVA)看到的,算是一個不錯用的小技巧!


利用這個方式可以隨機取得資料庫的資料來應用,如廣告、最新消息等....


使用 SQL 語法的 TOP n 來指定取得筆數,再用 ORDER BY 的方式,來亂數取得資料,並排序。


MS SQL:


SELECT TOP 1 * FROM Table WHERE 條件 ORDER BY NEWID()

ACCESS:


SELECT TOP 1 * FROM Table WHERE 條件 ORDER BY RND(數字欄位名稱)

MYSQL:


SELECT * FROM Table ORDER BY RAND() LIMIT 1


[1] 爪哇豆的秘密(JAVA) - 隨機取得資料(MSSQL,ACCESS,MYSQL)

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

登入 MySQL ~



shell > ./mysql -u root -p

(輸入密碼.... )

shell > show processlist;


就可以看現在有哪些 SQL 語法在執行,若耗 CPU 太兇則就要考慮對 SQL 語法最佳化囉!

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

今天被人告知 phpbb 打不開,昨天還好好的,今天就掛掉了 ~


然而一打開 phpbb 以後,呈現給我看的是錯誤訊息,無法 REPLACE INTO phpbb_sessions 這個 table ?


[code lang="html"]
MySQL errno: 145 Can't open phpbb_sessions.MYI
[/code]
這是第一次看到這個問題,於是利用 phpMyAdmin 來查看看是發生了什麼事 ~


耶, phpMyAdmin 也無法讀取到 ~"~


好吧,上 Google 求救一下,發現了這篇在 2003 年的文章,提問人和我一樣有類似的問題 ...


bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

上星期的發表會其實有一段小插曲,今天解決了就將它說明一下

當天早上一連上網站就看到

MySQL Connection Failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


當下就知道是 MySQL 沒有起來,於是下指令將 MySQL 再 Start,沒有錯誤訊息 ~ 重新整理網頁仍然是連不到 MySQL ~

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

今晚在寫一個程式,將所有的使用者帳號依英文字母分群顯示,語法不難 (以 A 為例)


select * from table where name like "A%"



於是很開心的利用陣列將 A 到 Z 產生出來,每一頁也都正確顯示,正在稱讚自己有多麼聰明時(雖然這很簡單,但我是很容易自滿的人)

熊熊發現,那還有「其它」怎麼辦,難道用數字、中文當帳號名稱的人就不能顯示嗎?

若用 not like 的語法,我相信寫 SQL 會寫到死,就算用 sub-query 一樣要寫 26 次,聽起來很殘忍我知道

於是向 YDL 大師請教了一下,他給了我二個網址 ... [1]PHP: eregi ... [2]酷!學園

果然修改了一下我的語法之後,就可以顯示其它人的資料囉



select * from table where name not regexp "^[a-zA-Z]"

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

這是在 PCZONE 看到的,看來有機會我可以試一下

不過一想到要將 Big5 transform UTF-8 就是一件頭大的事情

還好過去沒有將實體的檔案寫入資料庫,不然我應該會哭死吧

BTW, 這篇文章寫到最後被人潑了冷水 ~ MySQL 在 FreeBSD 的效能還是不比 Linux 丫 ?!

原文鏈結

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

<?php
$host = "localhost";
$user = "資料庫帳號";
$passwd = "資料庫密碼";
$connect = mysql_connect($host,$user,$passwd);
$db = mysql_connect($host,$user,$passwd);
mysql_select_db("資料庫",$connect);

$sql = "OPTIMIZE TABLE 資料表名稱";
$result = mysql_query($sql) or die ("未完成");
?>

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`id` int(4) NOT NULL default '0',
`classname` text NOT NULL
) TYPE=MyISAM CHARACTER SET=utf8;

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

備份:
mysqladmin -uroot -p flush-logs
mysqldump phpbb2 -uroot -p --opt > jdp.sql
      ^^^^<--資料庫名稱   ^^^^<--備份輸入檔
回存:
mysql phpbb2 -uroot -p < jdp.sql

若建立備份時是以"--opt"或"--add-drop-table"為參數時,回存的動作是先將舊的 Table 先刪除,重建 Table 的結構後再把 Data 匯入,所以回存後,所有的資料會回到你當時備份的時間點,使用這種回存方式,MySQL 服務不需停止,也不會動到其他正在使用的 DB ,在一些提供 MySQL 服務的虛擬主機,可用這種方式作你自己的 DB 備份及回存!

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

It's incompatibility of authorization MySQL 4.0.x and MySQL 4.1.x
Utilizing files authorization

for MySQL v4.0.x [The php MySQL extension access 'mysql']
libmysql.dll
php_mysql.dll

for MySQL v4.1.x [The php MySQL extension access 'mysqli']
libmysqli.dll
php_mysqli.dll

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()

一般連接 MySQL 時,如果你得到 Too many connections 錯誤回應訊息,這意味著巊經有超過max_connections 設定的 client 連接了 mysql 伺服器。如果 mysql 伺服器需要比預設更多的連接數,則可重新啟動 mysqld,微調 max_connections 變數值。
max_connections 乃允許客戶同時連接至 mysql 伺服器的最大數目,預設值為 100
用法如下:


mysql --set-variable(-O) max_connections = 500

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()