Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wird die Sortierung mit PDO ohne SET NAMES angegeben?

Hier ist eine Zwei-in-Eins-Antwort.

Sie können dies im DSN oder als MYSQL_ATTR_INIT_COMMAND (Verbindungsoptionen) festlegen.

DSN ist besser, denke ich.

$connect = new PDO(
  "mysql:host=$host;dbname=$db;charset=utf8", 
  $user, 
  $pass, 
  array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  )
); 

Wenn Sie UTF-8 angeben Sie arbeiten mit der Standardsortierung von utf8_general_ci , es sei denn, Ihre DB-Tabelle oder Ihr Feld verwendet etwas anderes.

Wenn Sie möchten, dass der gesamte Server mit dieser Standardsortierung antwortet, verwenden Sie die Konfigurationsanweisungen:

collation_server=utf8_unicode_ci 
character_set_server=utf8

Sie müssen es also nicht jedes Mal bei der Verbindung angeben.

Die Sortierungen wirken sich auf die Sortierung von Zeichen aus und werden für die Tabelle und die Felder in Ihrer Datenbank festgelegt. Diese Einstellungen werden beim Abfragen der Tabelle berücksichtigt. Stellen Sie sicher, dass sie festgelegt sind. Verwenden Sie UTF-8-Namen mit der in Ihrer Datenbank festgelegten Sortierung.

Ihr Kommentar:

Lassen Sie uns aus dem MySQL-Handbuch zitieren um das zu beweisen:

Meine Antwort:Es funktioniert implizit, es sei denn, Ihre Tabellen ändern dies explizit.

Frage vom Kommentar:

Beispiel:Spaltensortierung überschreibt Tabellensortierung

CREATE TABLE t1
(
    col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;

Wenn in einer Spalte sowohl CHARACTER SET X als auch COLLATE Y angegeben sind, werden der Zeichensatz X und die Sortierung Y verwendet. Die Spalte hat den Zeichensatz utf8 und Sortierung utf8_unicode_ci wie in der Tabellenspalte angegeben, während die Tabelle in latin1 + latin1_bin ist.

Beispiel:Im Allgemeinen wird die Sortierung von Tabellen verwendet

Wenn die Sortierung nicht explizit für eine Spalte/ein Feld angegeben ist, wird die Tabellensortierung verwendet:

CREATE TABLE t1
(
    col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;

col1 hat die Sortierung latin1_bin.

Wenn Sie utf8_unicode_ci möchten Sortierung, legen Sie es auf Ihre Tabellen im Allgemeinen oder auf die Spalten/Felder fest.