MySQL - テーブル

提供:MochiuWiki : SUSE, EC, PCB
2024年1月14日 (日) 04:19時点におけるWiki (トーク | 投稿記録)による版 (→‎概要)
ナビゲーションに移動 検索に移動

概要



テーブルの作成

文字コード

テーブルの作成時において、文字コードを指定する。

 CREATE TABLE <テーブル名> (
    <カラム名 1> <型名>
    <カラム名 2> <型名>
    -- ...略
    CHARACTER SET=utf8mb4  -- 文字コードをutf8mb4に指定する場合
 );


MySQLのデフォルトの文字コードを確認する。

 Show Variables Like "chara%";


MySQLのデフォルトの文字コードを設定する場合は、my.cnfファイルを編集する。
my.cnfファイルを変更した後は、MySQLを再起動する必要がある。

 # my.cnfファイル
 
 [mysqld]
 character-set-server=utf8mb4   # MySQLサーバのデフォルトの文字コードを指定する
 
 [client]
 default-character-set=utf8mb4  # MySQLクライアントのデフォルトの文字コードを指定する


既存のテーブルの文字コードは、INFORMATION_SCHEMAデータベースのTABLESテーブルから確認することができる。
TABLE_COLLATIONカラムの値が、そのテーブルに設定された文字コードに相当する。

 SELECT TABLE_NAME,TABLE_COLLATION
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA='<データベース名>';


既存のテーブルの文字コードを変更する。

 ALTER TABLE <テーブル名> CONVERT TO CHARACTER SET <文字コード>;
 
 # 例: 文字コードをutf8mb4に変更
 ALTER TABLE <テーブル名> CONVERT TO CHARACTER SET utf8mb4


既存のテーブルの存在を確認して作成

既存のテーブルが存在していない場合はテーブルを作成する。
これは、テーブルの重複、または、既存のテーブルを上書き/削除することを防ぐことができる。

 CREATE TABLE IF NOT EXISTS <テーブル名> (
    <カラム名 1> <型名>
    CHARACTER SET=utf8mb4       -- 文字コード
    COLLATE utf8mb4_general_ci  -- 照合順序
 );


テーブルのクローニングおよびコピー

CREATE TABLE ... LIKE文、または、CREATE TABLE ... AS SELECT文を使用して、
元のテーブルに定義されているカラム属性やインデックス等、別のテーブルの定義に基づいて空のテーブルを作成する。

 CREATE TABLE <新しいテーブル名> LIKE <クローン元のテーブル名>;
 -- または
 CREATE TABLE <新しいテーブル名> AS SELECT * FROM <クローン元のテーブル名>;



照合順序

照合順序とは

MySQLにおいて、照合順序(Collation)はテーブルや列ごとに設定することができる。
照合順序は、文字列の比較やソートの際に使用され、異なる言語や地域に合わせてテキストの比較を行うために重要である。

MySQLでは、様々な照合順序が提供されている。
例えば、大文字小文字を区別やアクセントを考慮するかどうか等の違いがある。

  • utf8mb4_general_ci
    大文字小文字を区別せず、アクセントを区別しない。
    通常の比較の場合には適しているが、文字の並び順は一般的な場合に従う。

  • utf8mb4_bin
    バイナリ比較を行う。
    大文字小文字やアクセント等を区別して、バイト単位で比較する。
    これは厳密なバイナリ比較が必要な場合に使用される。

  • utf8_general_ci
    utf8mb4と同様、大文字小文字を区別せず、アクセントを区別しない。
    ただし、utf8mb4よりも少ない文字セットを使用する。

  • latin1_swedish_ci
    ラテン1文字セットに基づいた照合順序であり、スウェーデンの標準に従う。
    大文字小文字を区別せず、アクセントを区別しない。


照合順序の詳細を知りたい場合は、MySQLの公式ドキュメントを参照すること。


テーブル作成時における照合順序の指定

以下の例では、データベースの作成時において、照合順序をutf8mb4_unicode_ciに指定している。

 CREATE TABLE <テーブル名> (
    <カラム名 1> VARCHAR(255) COLLATE utf8mb4_unicode_ci,
    <カラム名 2> INT
 );
 
 CREATE TABLE <テーブル名> (
    <カラム名 1> VARCHAR(255) COLLATE utf8_general_ci,
    <カラム名 2> INT,
    <カラム名 3> TEXT COLLATE utf8_unicode_ci
 );


※注意
テーブル全体に対する照合順序を一括で指定する方法は提供されていないことに注意する。

既存のテーブルや列の照合順序の変更

既存のテーブルや列の照合順序を変更することも可能である。

以下の例では、テーブルの該当カラムの照合順序をutf8mb4_unicode_ciに変更している。

 ALTER TABLE <テーブル名> MODIFY <カラム名> <カラムの型名> COLLATE utf8mb4_unicode_ci;
 
 -- 例
 ALTER TABLE <テーブル名> MODIFY hoge_col VARCHAR(255) COLLATE utf8mb4_unicode_ci;


デフォルトの照合順序

テーブルにおけるデフォルトの照合順序を確認する場合、
テーブル自体に照合順序が指定されていない場合、テーブルはデータベースのデフォルトの照合順序を継承する。

デフォルトのテーブル照合順序を確認する。

 SHOW TABLE STATUS LIKE '<テーブル名>';


これは、テーブルのステータス情報を表示する。
出力結果において、Collationカラムの値がテーブルの照合順序である。

もし、テーブルに照合順序が指定されていない場合、データベースのデフォルトの照合順序が表示される。