sql >> Database teknologi >  >> RDS >> Mysql

Hvordan specificerer man sortering med PDO uden SET NAMES?

Her er et to i ét svar.

Du kan indstille dette i DSN eller som MYSQL_ATTR_INIT_COMMAND (forbindelsesmuligheder).

DSN er bedre, synes jeg.

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

Hvis du angiver UTF-8 du arbejder med standardsorteringen af ​​utf8_general_ci , medmindre din db-tabel eller -felt bruger noget andet.

Hvis du ønsker, at hele serveren skal svare med denne standardsortering, skal du bruge konfigurationsdirektiver:

collation_server=utf8_unicode_ci 
character_set_server=utf8

Så du behøver ikke at angive det ved forbindelse hver gang.

Samlingerne påvirker sorteringen af ​​tegn og er indstillet på tabellen og felterne i din database. Disse indstillinger respekteres, når du forespørger i tabellen. Sørg for, at de er indstillet. Brug UTF-8-navne med sorteringssættet i din db.

Din kommentar:

Lad os citere fra MySQL-manualen for at bevise dette:

Mit svar:Det virker implicit, medmindre dine tabeller ændrer dette eksplicit.

Spørgsmål fra kommentar:

Eksempel:Kolonnesortering tilsidesætter tabelsortering

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

Hvis både CHARACTER SET X og COLLATE Y er angivet i en kolonne, bruges tegnsæt X og sortering Y. Kolonnen har tegnsæt utf8 og sortering utf8_unicode_ci som angivet i tabelkolonnen, mens tabellen er i latin1 + latin1_bin.

Eksempel:generelt bruges tabelsortering

Hvis sortering ikke er eksplicit angivet på en kolonne/felt, bruges tabelsorteringen:

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

col1 har sortering latin1_bin.

Hvis du vil have utf8_unicode_ci sæt den til dine tabeller generelt eller til kolonnerne/felterne.



  1. Rails auto-tildelings-id, der allerede eksisterer

  2. Hvad er forskellen mellem MySQL og SQL?

  3. Indsæt vælg MySQL med forberedte udsagn

  4. Find og erstat tekst i hele tabellen ved hjælp af en MySQL-forespørgsel