Database

Database

2019/12/14 (增補內容)
2024/04/30 (增補參考資料)
2024/05/06 (增補參考資料)
2024/05/21 (增補參考資料)

資料庫相關概念

MySQL語法:

CREATE TABLE `practice`.`job` ( 

 `postid` INT NOT NULL AUTO_INCREMENT ,

 `company` VARCHAR(45) NOT NULL ,

 `content` TEXT NOT NULL ,

 `pdate` DATE NOT NULL ,

 PRIMARY KEY (`postid`));

在標準的SQL語法 (SQL-92)裡,當資料表的名稱或者欄位名稱是關鍵字(如:order、group、desc)或有空白的時候,可以使用double quote ("),然而,很多程式語言使用double quote (")來表示字串,會造成系統開發上的困擾。所以,很多資料庫就會使用其他的方式來表達。MySQL可以利用backtick (`),在微軟的SQL server及Access裡,使用的是[]。

要避免跨資料庫的問題,建議資料表的名稱或者欄位名稱不使用關鍵字(如:order、group、desc)或空白。

SQL語法:

CREATE TABLE practice.job ( 

 postid INT NOT NULL AUTO_INCREMENT ,

 company VARCHAR(45) NOT NULL ,

 content TEXT NOT NULL ,

 pdate DATE NOT NULL ,

 PRIMARY KEY (postid));

另外,不少的資料庫也提供一些標準的SQL語法以外的語法或函數,所以,要注意跨資料庫的語法差異。

SQL語法簡介

select * from job;

select * from job where company = 'apple';

select * from job where company like '%p%';

insert into job (company, content, pdate) values ('Apple', 'Programmer', '2019-08-29');

update job set company='Apple', content='PHP Programmer', pdate='2019-08-29' where postid=1;

delete from job where postid=1; 

資料庫

比較常用的關聯式資料庫有SQL server,、MySQL、MariaDB、Oracle database。雖然都支援SQL,但在SQL語法上還是有些差異 (詳參: MySQL to SQL Server Coding Differences )。

MySQL是一個開源的資料庫,原本是由MySQL AB開發,2008年被Sun收購,2009年Oracle收購Sun時,就變成Oracle的產品了,MySQL最新版本是8.4.0 (2024/05/06更新) (下載: MySQL Community Downloads)(詳參:MySQL)。

MariaDB是MySQL的一個分支,在2013年由MySQL的創始人Ulf Michael Widenius與其他人一起成立了MaribDB Foundation來主導MariaDB的開發。在MariaDB 5.5之前,MariaDB的版本都與MySQL同步,後來MariaDB就跳到10.0,並且,MariaDB就與MySQL版本不再同步。目前最新的穩定版本是11.3.2 (2024/05/06更新)(下載: Downloads) (詳參: MariaDB)。 

一般而言,可以直接下載MySQL或Maria DB,也可以下載一些安裝包(如:XAMPP、AppServ),這些安裝包將這些軟體包裝好,可以一次安裝好,不必一個一個的安裝。使用安裝包的時候要注意,每個安裝包所內含的軟體是不太一樣的,目前最大的差異在於使用MySQL或MariaDB,例如,XAMPP內含MariaDB,AppServ內含MySQL,WampServer則是MySQL及MariaDB,另外,還要注意的是支援的作業系統,AppServ及WampServer支援windows,XAMPP號稱跨平台,所以,支援Windows、Mac、Linux版本。

常用的管理介面有phpmyadmin及MySQL WorkBench,可採用phpmyadmin,因為phpmyadmin是個web介面,而且是用php開發,一定要有apache伺服器才能執行,所以,phpmyadmint通常會包含在Appserv及XAMPP裡。

XAMPP支援Windows、Mac、Linux版本(詳參: XAMPP安裝與操作初步XAMPP v7.3.6 網頁伺服器自動架站機 ),XAMPP支援的是MariaDB,不過,介面上還是寫MySQL。XAMPP透過phpmyadmin來管理mysql。

另外,如果希望使用獨立的管理介面,可以使用MySQL Workbench,MariaDB10.0以後的版本跟MySQL不相容,所以,如果使用MariaDB10.0以後的版本,MySQL WorkBench就可能會有相容性的問題了。

中文的設定

** 一般而言,都不需要設定,如果有問題,請檢查

my.ini/my.cnf for utf-8 (一般而言,windows是使用C:\xampp\mysql\bin\my.ini C:\AppServ\MySQL\my.ini,Mac或linux 使用/etc/my.cnf 或 /etc/mysql/my.cnf,不過,如果是直接安裝MySQL server的話,那就要看 : MySQL – Locate the Configuration File – my.ini or my.cnf on Windows Platform )

可利用以下的sql檢查設定:

show variables like 'char%';

查到的結果應該是:

character_set_client      utf8mb4

character_set_connection  utf8mb4

character_set_database    utf8mb4

character_set_filesystem  binary

character_set_results     utf8mb4

character_set_server      utf8mb4

character_set_system      utf8

character_sets_dir        C:\AppServ\MySQL\share\charsets\

如果不是,那就要把my.ini修改為:

[mysqld]

## UTF 8 Settings

character_set_server=UTF8MB4

有些版本是使用減號

[mysqld]

## UTF 8 Settings

character-set-server=UTF8MB4

以及

[mysql]

default-character-set=UTF8MB4

如果怎麼改變數的內容都沒變,那可能是改錯設定檔了。

** 如果使用phpmyadmin,一般設定下,伺服器連線編碼與排序要改成utf8mb4_unicode_ci

在[mysqld]底下,需要:

[mysqld]

## UTF 8 Settings

init-connect='SET NAMES utf8mb4'

collation_server=utf8mb4_unicode_ci

character_set_server=utf8mb4

有些版本,在[client]底下,需要:

[client]

default-character-set=utf8mb4

有些版本,在[mysql]底下,需要:

[mysql]

default-character-set=utf8mb4

參考資料

無法啟動

無法登入

資料庫/資料表損壞

中文亂碼

//PDO的連接語法

$pdo = new PDO("mysql:host=$db_server;dbname=$db_name",$db_user,$db_password);

//設定為utf8編碼,必要設定

$pdo->query('SET NAMES "utf8"'); 

5.3.6以後的寫法 (詳參: Set charset on PDO connection with mysql in PHP)

$pdo = new PDO("mysql:host=$db_server;dbname=$db_name;charset=utf8",$db_user,$db_password);

phpMyAdmin.pptx