Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak określić sortowanie z PDO bez SET NAMES?

Oto odpowiedź dwa w jednym.

Możesz to ustawić w DSN lub jako MYSQL_ATTR_INIT_COMMAND (opcje połączenia).

Myślę, że DSN jest lepsze.

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

Jeśli określisz UTF-8 pracujesz z domyślnym sortowaniem utf8_general_ci , chyba że Twoja tabela lub pole bazy danych używa czegoś innego.

Jeśli chcesz, aby cały serwer odpowiadał z tym domyślnym sortowaniem, użyj dyrektyw konfiguracyjnych:

collation_server=utf8_unicode_ci 
character_set_server=utf8

Więc nie musisz za każdym razem określać tego przy połączeniu.

Sortowanie wpływa na sortowanie znaków i jest ustawiane w tabeli i polach w Twojej bazie danych. Te ustawienia są przestrzegane podczas wykonywania zapytań do tabeli. Upewnij się, że są ustawione.Użyj nazw UTF-8 z sortowaniem ustawionym w bazie danych.

Twój komentarz:

Przytoczmy cytat z podręcznika MySQL aby to udowodnić:

Moja odpowiedź:Działa domyślnie, chyba że Twoje tabele wyraźnie to zmienią.

Pytanie z komentarza:

Przykład:sortowanie kolumn zastępuje sortowanie tabeli

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

Jeśli w kolumnie określono zarówno ZESTAW ZNAKÓW X, jak i UKŁADANIE Y, używany jest zestaw znaków X i sortowanie Y. Kolumna ma zestaw znaków utf8 i sortowanie utf8_unicode_ci jak określono w kolumnie tabeli, podczas gdy tabela jest w latin1 + latin1_bin.

Przykład:ogólnie używane jest sortowanie tabeli

Jeśli sortowanie nie jest wyraźnie określone w kolumnie/polu, używane jest sortowanie tabeli:

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

col1 ma sortowanie latin1_bin.

Jeśli chcesz utf8_unicode_ci sortowanie, ustaw je ogólnie na tabelach lub na kolumny/pola.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieprawidłowy tekst JSON w argumencie 2 - json_contains w MySQL 5.7.8

  2. MySQL - tworzenie funkcji zdefiniowanej przez użytkownika dla niestandardowego sortowania

  3. Co monitorować w MySQL 8.0

  4. Dane binarne nie są prawidłowo przechowywane w MySQL

  5. MYSQL INNER JOIN z możliwymi pustymi polami