php mysql SET NAMES 'utf8' COLLATE 'utf8_unicode_ci' doesn't work with mysqli

前端 未结 5 1929
天命终不由人
天命终不由人 2020-12-18 07:04

I am migrating my site into php mysqli from php mysql_* methods.

I had following code that did the job:

mysql_query(\"SET NAMES \'utf8\' COLLA

相关标签:
5条回答
  • 2020-12-18 07:15

    It is not recommended to use mysqli query in order to set names but rather mysqli::set_charset

    $mysqli = new mysqli("localhost", "root", "", "test");
    $mysqli->set_charset("utf8");
    
    0 讨论(0)
  • 2020-12-18 07:15

    http://php.net/manual/en/mysqli.set-charset.php

    or

    mysqli->set_charset("utf8")

    0 讨论(0)
  • 2020-12-18 07:24

    You can use mysqli_set_charset

    This is the preferred way to change the charset. Using mysqli_query() to set it (such as SET NAMES utf8) is not recommended.

    However, to set collation, you will still have to use the SET NAMES query.

    0 讨论(0)
  • 2020-12-18 07:39
    $con=mysqli_connect("localhost","admin","1234","web");
    $con->set_charset("utf8");
    
    0 讨论(0)
  • 2020-12-18 07:42

    A PHP feature request/bug report was filed...

    See https://bugs.php.net/bug.php?id=52267 which garnered the response from uw@php.net:

    ...use mysqli_set_charset() to set the charset and then SET NAMES to change the collation.

    He/she also links to http://dev.mysql.com/doc/refman/5.1/en/mysql-set-character-set.html

    This function is used to set the default character set for the current connection. The string csname specifies a valid character set name. The connection collation becomes the default collation of the character set. This function works like the SET NAMES statement, but also sets the value of mysql->charset, and thus affects the character set used by mysql_real_escape_string()

    And I'll link to http://dev.mysql.com/doc/refman/5.6/en/charset-collate.html which shows how to make queries using whatever collation suits that query.

    With the COLLATE clause, you can override whatever the default collation is for a comparison. COLLATE may be used in various parts of SQL statements. Here are some examples:

    • With ORDER BY:
      SELECT k FROM t1 ORDER BY k COLLATE latin1_german2_ci;

    • With AS:
      SELECT k COLLATE latin1_german2_ci AS k1 FROM t1 ORDER BY k1;

    • With GROUP BY:
      SELECT k FROM t1 GROUP BY k COLLATE latin1_german2_ci;

    • With aggregate functions:
      SELECT MAX(k COLLATE latin1_german2_ci) FROM t1;

    • With DISTINCT:
      SELECT DISTINCT k COLLATE latin1_german2_ci FROM t1;

    • With WHERE:
      SELECT * FROM t1 WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k; SELECT * FROM t1 WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;

    • With HAVING:
      SELECT k FROM t1 GROUP BY k HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;

    0 讨论(0)
提交回复
热议问题