php - 如何使用 mysqli 设置排序规则?

标签 php mysql mysqli collation

我的数据库使用 utf8_czech_ci 排序规则,我也想将它设置为我的数据库连接。 Mysqli_set_charset 不会让我设置排序规则,如果我不想要默认的排序规则,utf8_general_ci。 Here建议首先通过 mysqli_set_charset 设置字符集,然后通过 SET NAMES 设置排序规则。所以我做到了,连接排序规则仍然是 utf8_general_ci。

编辑:现在我基本上使用代码 YourCommonSense建议:

  $spojeni=mysqli_connect('mysql01','username','password', 'my_database');
  if (!$spojeni) die('Nepodařilo se připojit k databázi.');
  mysqli_set_charset($spojeni,'utf8');
  mysqli_query($spojeni, "SET COLLATION_CONNECTION = 'utf8_czech_ci';");

然而,我刚刚遇到了Illegal mix of collations错误。在通过 mysqli_get_charset() 测试我的连接排序规则时,我发现我的排序规则是“utf8_general_ci”,而不是它应该的“utf8_czech_ci”。这意味着最初接受的答案由于某种神秘原因而停止工作。我在本地主机和托管服务器上都对其进行了测试,甚至在声明数据库之后也进行了测试,因此偶然更改排序规则的错误似乎是不可能的。

那么如何以其他方式更改排序规则呢?

我以前的代码,出于存档原因:

  $spojeni=mysqli_connect('mysql01','username','password');
  if (!$spojeni) die('Nepodařilo se připojit k databázi.');
  mysqli_query($spojeni, "USE my_database");
  mysqli_set_charset($spojeni,'utf8');
  mysqli_query($spojeni, "SET NAMES 'utf8' COLLATE 'utf8_czech_ci';");

EDIT2:show variables like "%collat​​ion%";collat​​ion_connection 的值显示为 utf8_general_ci;其他排序规则变量设置为 utf8_czech_ci。在 Adminer 中运行此命令时,只有在 SET NAMESSET COLLATION_CONNECTION(请参阅上面我的代码的最后几行以了解确切的语法)。当我从 php 代码(通过 mysqli_query)运行 show variables 时,它显示为 utf8_czech_ci,但是比较从表中选择的值和客户设置的值仍然提示 illegal mix of collations .

详情在我的related question .

EDIT3:我找到了a good workaround for the errors .我仍然不明白为什么 Adminer 和 Mysqli 查询中显示的变量之间存在差异,但我已经在 follow-up question 中要求过它.与我的怀疑不同,最初接受的答案至少在大多数情况下是有效的,所以我再次接受它。

最佳答案

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli=mysqli_connect('mysql01','username','password', 'my_database');
$mysqli->set_charset('utf8mb4');
// setting collation is optional and not needed 99% of time
// only if you need a specific one, like in this case
$mysqli->query("SET collation_connection = utf8mb4_czech_ci");

关于php - 如何使用 mysqli 设置排序规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20643255/

相关文章:

php - 在 PHP 中通过 Hive/Thrift 查询数据库不起作用

php - 如何使用 NotORM lib 连接一对多表

php - 使用数组值更新 MySQL 数据库

php - 使用 mysql 通过 Web 服务获取 Jomsocial 用户详细信息

php - 更新多个字段时更新未推送到数据库

基于 SSL 的 PHP MySQL。对等证书不匹配

php - mysqli bind_param 给出错误 : (1210) Incorrect arguments to mysql_stmt_execute

php - 如何计算在查询的 SELECT 部分中生成的列?

php - 在任意正则表达式中插入正向后向模拟字节偏移的后果

php - 将一个元素推送到php中多维数组中的每个数组?