Установить Charset / Collation MySQL PHP? - PullRequest
3 голосов
/ 27 февраля 2020

Как установить параметры сортировки для MySQL Соединение?

// Here is default/Expected output
mysqli_get_charset($con);
object(stdClass)[2]
  public 'charset' => string 'utf8mb4' (length=7)
  public 'collation' => string 'utf8mb4_unicode_ci' (length=18)
  public 'dir' => string '' (length=0)
  public 'min_length' => int 1
  public 'max_length' => int 4
  public 'number' => int 224
  public 'state' => int 1
  public 'comment' => string '' (length=0)

mysqli_character_set_name($con);
\tests\db.php:22:string 'utf8mb4' (length=7)

После настройки кодировки с помощью:

mysqli_set_charset($con, 'utf8mb4');

// Output :

mysqli_get_charset($con);
object(stdClass)[2]
  public 'charset' => string 'utf8mb4' (length=7)
  public 'collation' => string 'utf8mb4_general_ci' (length=18)
  public 'dir' => string '' (length=0)
  public 'min_length' => int 1
  public 'max_length' => int 4
  public 'number' => int 45
  public 'state' => int 1
  public 'comment' => string 'UTF-8 Unicode' (length=13)

mysqli_character_set_name($con);
\tests\db.php:22:string 'utf8mb4' (length=7)

Попробовать с помощью этих:

mysqli_set_charset($con, 'utf8mb4');
mysqli_query($con, "SET NAMES 'utf8mb4';");
mysqli_query($con, "SET CHARACTER SET 'utf8mb4';");
mysqli_query($con, "SET COLLATION_CONNECTION = 'utf8mb4_unicode_ci';");

После используя mysqli_set_charset($con, 'utf8mb4');

, сопоставление сбрасывается до utf8mb4_general_ci.

Любой способ предотвратить это.

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 27 февраля 2020

Полагаю, вы не заботитесь о сопоставлении client .

Единственное использование для клиента, связанного с набором символов, - это экранирующая функция, но она использует только набор символов и не заботится о сопоставлении, которое используется только на сервере.

Поэтому, если вам нужно установить параметры сортировки c, правильный код будет

mysqli_set_charset($con, 'utf8mb4');
mysqli_query($con, "SET COLLATION_CONNECTION = 'utf8mb4_unicode_ci'");

. После этого будут установлены и правильная кодировка, и параметры сортировки.

Вы можете проверить это со следующим кодом:

var_dump(mysqli_get_charset($con)->collation,$con->query("select @@collation_connection")->fetch_row()[0]);
mysqli_set_charset($con, 'utf8mb4');
var_dump(mysqli_get_charset($con)->collation,$con->query("select @@collation_connection")->fetch_row()[0]);
mysqli_query($con, "SET COLLATION_CONNECTION = 'utf8mb4_unicode_ci'");
var_dump(mysqli_get_charset($con)->collation,$con->query("select @@collation_connection")->fetch_row()[0]);

Для меня это выводит

string(17) "latin1_swedish_ci"
string(17) "latin1_swedish_ci"
string(18) "utf8mb4_general_ci"
string(18) "utf8mb4_general_ci"
string(18) "utf8mb4_general_ci"
string(18) "utf8mb4_unicode_ci"

, а последний - сопоставление connection - это то, что вам действительно нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...