(PHP 5 >= 5.1.0, PHP 7, PHP 8)
mysqli::get_charset -- mysqli_get_charset — Returns a character set object
Object-oriented style
Procedural style
Returns a character set object providing several properties of the current active character set.
mysql
Procedural style only: A mysqli object returned by mysqli_connect() or mysqli_init()
The function returns a character set object with the following properties:
charset
Character set name
collation
Collation name
dir
Directory the charset description was fetched from (?) or "" for built-in character sets
min_length
Minimum character length in bytes
max_length
Maximum character length in bytes
number
Internal character set number
state
Character set status (?)
Example #1 mysqli::get_charset() example
Object-oriented style
<?php
$db = mysqli_init();
$db->real_connect("localhost","root","","test");
var_dump($db->get_charset());
?>
Procedural style
<?php
$db = mysqli_init();
mysqli_real_connect($db, "localhost","root","","test");
var_dump(mysqli_get_charset($db));
?>
The above examples will output:
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%';