a-blog cms PHP API Reference

CharsetDiagnostics
in package

接続文字セットとカラム文字セットの食い違いを診断する

4 バイト文字(絵文字など)が壊れるのは「接続」と「カラム」のどちらかが utf8mb3 のときで、 どちらが狭いかによって対処が変わる(接続を直すのか、カラムを変換するのか)。 sql_mode から STRICT を外している都合で保存時は警告だけで例外にならず、 運用側から気付けないため、組み合わせを判定して管理画面に出す。

Table of Contents

Constants

STATUS_BOTH_NARROW  = 'both_narrow'
接続もカラムも utf8mb3。一貫しているが 4 バイト文字を扱えない
STATUS_COLUMN_NARROWER  = 'column_narrower'
接続は utf8mb4 だが utf8mb3 のカラムが残っており、そのカラムには 4 バイト文字が入らない
STATUS_CONNECTION_NARROWER  = 'connection_narrower'
接続が utf8mb3。utf8mb4 カラムへ 4 バイト文字を保存すると壊れる
STATUS_OK  = 'ok'
接続とカラムがどちらも 4 バイト文字を扱える
STATUS_UNKNOWN  = 'unknown'
utf8 系以外の運用、またはカラム情報が取得できず判定できない

Properties

$databaseName  : string
$engine  : Base
$tablePrefix  : string

Methods

__construct()  : mixed
columnCharsetCounts()  : array<string, int>
テーブル接頭辞に一致するテーブルについて、カラムの文字セットを集計する
diagnose()  : array{connection: string, status: string, caution: bool}
接続文字セットと、カラム文字セットとの組み合わせの判定結果を返す
isCaution()  : bool
対処が必要な状態かどうか
judge()  : string
接続文字セットとカラム文字セットの集計から状態を判定する
isFourByteCapable()  : bool
isUtf8Family()  : bool
MySQL の `utf8` は utf8mb3 のエイリアスなので同一として扱う

Constants

STATUS_BOTH_NARROW

接続もカラムも utf8mb3。一貫しているが 4 バイト文字を扱えない

public mixed STATUS_BOTH_NARROW = 'both_narrow'

STATUS_COLUMN_NARROWER

接続は utf8mb4 だが utf8mb3 のカラムが残っており、そのカラムには 4 バイト文字が入らない

public mixed STATUS_COLUMN_NARROWER = 'column_narrower'

STATUS_CONNECTION_NARROWER

接続が utf8mb3。utf8mb4 カラムへ 4 バイト文字を保存すると壊れる

public mixed STATUS_CONNECTION_NARROWER = 'connection_narrower'

STATUS_OK

接続とカラムがどちらも 4 バイト文字を扱える

public mixed STATUS_OK = 'ok'

STATUS_UNKNOWN

utf8 系以外の運用、またはカラム情報が取得できず判定できない

public mixed STATUS_UNKNOWN = 'unknown'

Properties

Methods

__construct()

public __construct(Base $engine, string $databaseName, string $tablePrefix) : mixed
Parameters
$engine : Base
$databaseName : string
$tablePrefix : string

columnCharsetCounts()

テーブル接頭辞に一致するテーブルについて、カラムの文字セットを集計する

public columnCharsetCounts() : array<string, int>

文字セットを持たないカラム(int / blob / datetime 等)は集計対象外。

Return values
array<string, int> —

文字セット名 => カラム数(多い順)

diagnose()

接続文字セットと、カラム文字セットとの組み合わせの判定結果を返す

public diagnose() : array{connection: string, status: string, caution: bool}

集計の内訳が必要な場合は columnCharsetCounts() を直接呼ぶ。

Return values
array{connection: string, status: string, caution: bool}

isCaution()

対処が必要な状態かどうか

public static isCaution(string $status) : bool
Parameters
$status : string
Return values
bool

judge()

接続文字セットとカラム文字セットの集計から状態を判定する

public static judge(string $connectionCharset, array<string, int> $columnCharsetCounts) : string
Parameters
$connectionCharset : string
$columnCharsetCounts : array<string, int>
Return values
string

isFourByteCapable()

private static isFourByteCapable(string $charset) : bool
Parameters
$charset : string
Return values
bool

isUtf8Family()

MySQL の `utf8` は utf8mb3 のエイリアスなので同一として扱う

private static isUtf8Family(string $charset) : bool
Parameters
$charset : string
Return values
bool

        
On this page

Search results