(PHP 5 >= 5.1.0, PHP 7, PHP 8)
mysqli::get_charset -- mysqli_get_charset — 文字セットオブジェクトを返す
オブジェクト指向型
手続き型
文字セットオブジェクトを返します。 これは、現在アクティブな文字セットについてのプロパティを提供します。
この関数は、以下のプロパティを持つ文字セットオブジェクトを返します。
charset文字セット名
collation照合規則名
dir文字セットの設定を読み込むディレクトリ。組み込みの文字セットについては ""
min_length最小の文字の長さ (バイト数)
max_length最大の文字の長さ (バイト数)
number内部文字セット番号
state文字セットの状態
例1 mysqli::get_charset() の例
オブジェクト指向型
<?php
$db = mysqli_init();
$db->real_connect("localhost","root","","test");
var_dump($db->get_charset());
?>手続き型
<?php
$db = mysqli_init();
mysqli_real_connect($db, "localhost","root","","test");
var_dump(mysqli_get_charset($db));
?>上の例の出力は以下となります。
object(stdClass)#2 (7) {
["charset"]=>
string(6) "latin1"
["collation"]=>
string(17) "latin1_swedish_ci"
["dir"]=>
string(0) ""
["min_length"]=>
int(1)
["max_length"]=>
int(1)
["number"]=>
int(8)
["state"]=>
int(801)
}
On a new server this function was incorrectly returning "utf8mb4_general_ci".
I started a bug report and it turns out that:
1. The PHP team maintained an internal static list.
2. They ultimately decided to not be bothered to update that internal static list.
So as someone with the intentions on knowing exactly what is going on (e.g. Paris Michigan !== Paris France) I now reject the use of this function.
I'm not sure about other databases though for MariaDB you can determine the many character sets using the following SQL query:
SELECT VARIABLE_NAME, GLOBAL_VALUE, DEFAULT_VALUE
FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES
WHERE VARIABLE_NAME LIKE '%CHAR%';