PIXNET Logo登入

Avril Note

跳到主文

電腦類筆記

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 2月 10 週三 201018:20
  • InnoDB 轉換步驟

InnoDB 轉換步驟:
01. mysqldump -u[user] -p[password] [databasename] > [dump_name] # 備份資料庫
02. /usr/local/mysql/bin/mysqladmin -u root -p shutdown # 停止資料庫
  或是將整個 mysql tar 起來也可以。(不過還是建議用 mysqldump 的方式備份)
03. 建議將 InnoDB 中文參考手冊看過一次,這樣遇上問題,不會浪費太多時間在找答案。
  InnoDB 中文參考手冊
   http://www.twbb.org/ebook/MYSQL_INNDB_BIG5/
  【例如:InnoDB 表不支持全文搜索(fulltext search),這樣我們就得
  注意等等記得要將備份出來的資料庫,刪掉有關 Fulltext 的索引】
  盡量看過,不然有先限制不知道的話,弄垮會浪費更多時間。
  InnoDB 的限制
   http://www.twbb.org/ebook/MYSQL_INNDB_BIG5/14.htm#InnoDB_restrictions
04. cd /usr/local/mysql/support-files/ 找尋適合主機記憶體的設定檔,必將設定檔拷貝到 /etc/my.cnf。
05. vi /etc/my.cnf ,將以下幾項註解取消掉。(以下為 my-large.cnf 的設定檔) 
  innodb_data_file_path = ibdata1:10M:autoextend
  innodb_buffer_pool_size = 256M
  innodb_additional_mem_pool_size = 20M
  innodb_log_file_size = 5M
  innodb_log_buffer_size = 8M
  innodb_flush_log_at_trx_commit = 1
  innodb_lock_wait_timeout = 50
  加上 default-table-type=innodb
  加上這段之後,以後新增的資料表型態都會是 InnoDB 囉,
  不然每次新增一次資料表,SQL 後面得加上 Type=innodb;
  避免麻煩,就先設定進去吧!但這個步驟不等於直接將MyISAM改
  變成 InnoDB 型態喔!
  當然啦!要用InnoDB當然得改成InnoDB的格式囉。^^"
06 .將剛剛備份出來的檔案,將Type=MyISAM改成Type=innodb。
07. /usr/local/mysql/bin/safe_mysqld --user=mysql & # 啟動資料庫
08. 建立一個新的資料庫(資料庫名稱跟備份出來的資料庫名稱一樣)。
09. mysql -u[user] -p[password] [database_name] < [dump_name] # 將改好的資料匯入資料庫中!
10. 做 Transaction 的測試,假如都沒問題,那就大公告成囉!
* 設定檔的選擇是參照記憶體大小來選擇。
 my-huge.cnf - 1G~2G 、my-large.cnf - 512M 、   
 my-medium.cnf - 32M - 64M 、my-small.cnf <= 64M 。
 InnoDB:my-innodb-heavy-4G.cnf
* 假如不會將備份出來的資料庫改型態,那麼您可以用下面這個指令,
 直接改變資料表的型態。
 ALTER TABLE [tablename] TYPE=InnoDB
 如有存放全文索引功能的話,轉換會失敗喔!這點請各位要注意一下!
* 假若~你有一堆資料表要改,可以用下面的指令:
 root# mysql_convert_table_format [opt] --type=InnoDB dbname [tablename]
 但千萬注意!不要改變 mysql 資料庫的資料型態喔!因為 mysql
 資料庫存放的是 MySQL 內部的管理資訊,所以必須保持 MyISAM 的格式。
* 加大 tablespace 空間:
 innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend:max2G
 上面的意思是,tablespace 包含 ibdata1 & ibdata2 兩個檔案,
 若檔案不存在,則建立容量各為1G的檔案。一旦未來 InnoDB 需要,
 更多的空間,則 ibdata2 將每次自動增加 8MB,直到2G為止。
 * MySQL 3.23.n,innodb_data_home & innodb_data_file_path
  設定是必須要有的,MySQL 4.0.0 之後的版本則是非必須的。
In php/mysql   April 7, 2006 - 9:38 am
今早六點半就起床準備十一點的demo,結果意外的發現在開發機上運作正常的程式 deploy 到 notebook後居然連login都進不去。
經過一番測試才發現nb上裝的環境是 php 5.1.1 + mysql 5.1 而開發機是 php 5.0.4 + mysql 4.1,從 php 5.1開始php是預設抓美國時區,所以timezone必需要在php.ini裏正確設定。
語法如下:
php.ini 內
[date]
date.timezone = Asia/Taipei
另外有一個 php function (signature 如下):
bool date_default_timezone_set ( string timezone_identifier )
只要輸入 date_default_timezone_set( “Asia/Taipei” ) 即可。
這件事得到兩件教訓:
-開發過程中沒事千萬別換系統版本,即使版號只差 0.1 也不能動,只要有一個地方改變,整個 QA process就要重跑一遍
-RTFM
(繼續閱讀...)
文章標籤

avrilnote 發表在 痞客邦 留言(0) 人氣(218)

  • 個人分類:MYSQL
▲top
  • 2月 10 週三 201018:19
  • mysql中文亂碼的原因

mysql中文亂碼的原因
*mysql中文亂碼的原因
mysql 會出現中文亂碼的原因不外乎下列幾點:
→ mysql server本身設定問題,例如還停留在 latin1
→ mysql table 的語系設定問題(包含 character 與 collation)
→ 客戶端程式(例如 php) 的連線語系設定問題
mysql 4.1 及之後的版本在語系方面增加了許多功能,它可以設定語系的層次從最底層的 server, database 到單一
table, column, connection 都可以設定,而除了語系之外,還可以指定搭配不同的
collation(校對),所以組合百百種,只要一個錯了就難逃亂碼的命運。
進phpmyadmin找到可輸入 sql query的畫面,然後鍵入:
show variables like '%character%';
這句話會顯示目前資料庫使用的語系設定,一般國外的網站或剛裝好的 mysql 4.1預設都是 latin-1。
[新增資料庫]
如果你熟悉 phpmyadmin 的操作,在畫面上就可以選擇建立新 database 要用的語系,
charset 請選擇 UTF-8 Unicode (utf8)
collation 請選擇 utf8_general_ci (ci 代表 case insensitve 大小寫沒差)
[修改資料庫]
改 database語系,同樣在 phpmyadmin 的query畫面鍵入下面兩行:
alter database myblog
character set utf8;
前面曾經提過,mysql的語系設定是多層次的,前面我們把database與table的語系都設定正確,但程式與mysql連線時的語系則是由 connection 來決定,這部份就要使用程式碼
mysql_query("SET NAMES 'utf8'");
這句話會同時設定 client, results, connection三者使用的語系為 utf-8。
最後檢查是否全部改成 utf-8
show variables like '%character%';
此時你應該會看到大部份欄位都是utf-8了,除了 server 這項之外,如果是用別人的 hosting 主機,就沒法兒改這部份,但平常做案子時大部份都可以直接控管mysql,此時就可以用 my.ini 設定:
[mysqld]
default-character-set=utf8
告訴mysql server啟動時要用 utf-8即可。
*mysql中文亂碼必勝解決法
1、mysql 啟動時會讀取一個預設的 config 檔,一般名稱為 my.ini,而它會到下列兩位置去尋找這個檔案:
C:\windows\my.ini 也就是作業系統的安裝目錄,也有可能是 C:\winnt\my.ini
C:\:my.cnf 也就是 C disk 的根目錄
2、my.ini 裏的內容為:
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
init_c
其中 mysqld 是指定 server 啟動時要用的語系,但如果這裏設定為 utf8 可能會讓許多英文軟體不開心,例如
osCommerce/mediaWiki/wordpress/drupal/gregarius,所以這裏建議設成
latin1。要使用utf8中文的人,只要記得建資料庫時將它設成utf8,讓中文程式正確的使用 utf8 與它溝通即可。
下面的 client 則是設定當 client 連線時要使用什麼語系,但可惜的是這個設定不是每個 client 都會鳥它,基本上只有
mysql 自已家的程式,例如 mysql.exe, mysqld.exe, mysqladmin.exe 或是 MySQL Control
Center 這種程式會去讀取這個設定檔然後改用 utf8 連線。
所以通常會用一個獨立的檔案來處理 mysql connection的設定,例如:
PHP:
[code]
<?
//database connection details.
$host = "localhost";
$link = mysql_connect($host, "xxx", "xxx");
mysql_query("SET NAMES 'utf8'");
mysql_select_db("your_table_name_here", $link);
?>
[/code]
請注意在 mysql_connect後第五行的地方有加上一個 "set names 'utf8' "的指令,告訴mysql 這個 connection 之後的連線內容都要使用utf8,經過這樣設定後,通常就可以解決大部份問題。
從這裏也可以推想得知,如果你有用某種 custom connection pooling 機制,就要記得在每次建立新的 connection 後立即設定為 utf8。
(繼續閱讀...)
文章標籤

avrilnote 發表在 痞客邦 留言(0) 人氣(11,142)

  • 個人分類:MYSQL
▲top
  • 2月 10 週三 201018:17
  • 外來鍵設定-MYSQL

在有被其他資料表 Reference 成 Foreign Key 的情況下刪除資料時資料庫會發出:
Cannot delete or update a parent row: a foreign key constraint fails
後來才發現在建立資料庫時,如果不會自己的 Foreign Key 設定動作的話,資料庫預設是不會做連動的更改( NO ACTION )。
 
(繼續閱讀...)
文章標籤

avrilnote 發表在 痞客邦 留言(0) 人氣(569)

  • 個人分類:MYSQL
▲top
  • 10月 22 週四 200911:45
  • 編碼問題----UTF-8轉BIG5

編碼問題----UTF-8轉BIG5
在Big5轉換成UTF-8方面,完全沒有問題;不過在UTF-8轉換成Big5方面,可就出現問題啦!因為UTF-8編碼對應的字遠比Big5編碼多,所以在一些特殊中文字的轉換上,如:堃、犇等字,iconv()函數就會出現錯誤啦!本來一直都沒有發現到這方面的問題,不過最近在公司專案管理系統上的Excel表轉出時,遇到有對方公司有「犇」這個字,讓iconv()函數發生錯誤而導致轉出的Excel檔案整個損壞的情況發生...Excel在正常輸入時是對應UTF-8編碼的,不過在轉出檔案時必須改為Big5編碼,不然UTF-8編碼的中文字會變成亂碼~無法自動判斷真是傷腦筋耶!
後來上網找了很久,都沒有令人滿意的答案;大家在轉出Excel檔時,幾乎都還是利用iconv()函數先轉成Big5編碼再轉出。後來我發現到另外一個函數:mb_convert_encoding(),似乎也是在處理編碼轉換的函數。試用之後雖然不存在的字還是不會自己生出來(如:堃、犇這些Big5編碼本來就沒有的字),但是轉不出來的字它會以「?」顯示,不會發生錯誤訊息,自然也就能正確的開啟轉出的Excel檔囉!雖然這並不是治本的方法,不過算是有稍微解決一些問題啦!
(繼續閱讀...)
文章標籤

avrilnote 發表在 痞客邦 留言(0) 人氣(7,635)

  • 個人分類:MYSQL
▲top
  • 10月 22 週四 200910:19
  • MYSQL型態介紹

一、文字型態


種類



範圍



說明



例如




Char(N) [ binary]
N=1~255 個字元
binary :分辨大小寫
固定長度
std_name cahr(32) not null


VarChar(N) [ binary]
N=1~255 個字元
binary :分辨大小寫
可變長度
std_address varchar(256)


TinyBlob
最大長度255個字元(2^8-1)

Blob (Binary large objects)儲存二進位資料,且有分大小寫



memo text not null


TinyText
最大長度255個字元(2^8-1)


Blob
最大長度65535個字元(2^16-1)


Text
最大長度65535個字元(2^16-1)


MediumBlob
最大長度 16777215 個字元(2^24-1)


MediumText
最大長度 16777215 個字元(2^24-1


LongBlob
最大長度4294967295個字元 (2^32-1)


LongText
最大長度4294967295個字元 (2^32-1)


Enum
集合最大數目為65535
列舉(Enumeration),Enum單選、Set複選
sex enum(1,0)
habby set('玩電玩','睡覺','看電影','聽音樂')


Set
集合最大數目為64

(繼續閱讀...)
文章標籤

avrilnote 發表在 痞客邦 留言(0) 人氣(773)

  • 個人分類:MYSQL
▲top
1

個人資訊

avrilnote
暱稱:
avrilnote
分類:
不設分類
好友:
累積中
地區:

熱門文章

  • (29,706)細說HTML元素的ID和Name屬性的區別
  • (5,769)PHP中SESSION不能跨頁傳遞問題的解決辦法
  • (7,635)編碼問題----UTF-8轉BIG5
  • (3,689)抓取或備份整個網站-HTTrack
  • (439)smarty應用
  • (144)系統分析與設計說明文字
  • (11,142)mysql中文亂碼的原因
  • (5,204)利用PHPExcel匯出xlsx及xls檔設定說明

文章分類

  • javascript (1)
  • php-session (1)
  • php-上傳檔案 (1)
  • JQuery (0)
  • html編輯器 (1)
  • test (0)
  • php正規式 (0)
  • 圖型驗證碼 (0)
  • php函式-路徑類 (1)
  • 系統分析與設計 (1)
  • PHP-縮圖 (1)
  • 列印 (3)
  • 軟體介紹 (1)
  • PHP安全性 (1)
  • SMARTY (3)
  • PHP-亂碼問題 (1)
  • php函式 (11)
  • CSS (6)
  • MYSQL (5)
  • PHP設定 (2)
  • PHP (5)
  • JS (3)
  • W3C (1)
  • HTML (3)
  • AJAX (1)
  • 未分類文章 (1)

最新文章

  • 一系列server路徑
  • javacipt-另開視窗語法
  • php檔案上傳
  • 利用PHPExcel匯出xlsx及xls檔設定說明
  • phpexcel-將excel新增入mysql
  • css基本設定
  • 使用Javascript控制IE列印格式
  • 全選核取方塊-js
  • InnoDB 轉換步驟
  • mysql中文亂碼的原因

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: