sql >> Database >  >> RDS >> Mysql

Hoe collatie specificeren met PDO zonder SET NAMES?

Hier is een twee-in-één antwoord.

U kunt dit instellen in de DSN of als MYSQL_ATTR_INIT_COMMAND (verbindingsopties).

DSN is beter, denk ik.

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

Als u UTF-8 . opgeeft je werkt met de standaard sortering van utf8_general_ci , tenzij uw db-tabel of veld iets anders gebruikt.

Als je wilt dat de hele server reageert met deze standaardsortering, gebruik dan configuratierichtlijnen:

collation_server=utf8_unicode_ci 
character_set_server=utf8

Je hoeft het dus niet elke keer op te geven bij het maken van een verbinding.

De sorteringen zijn van invloed op het sorteren van tekens en worden ingesteld op de tabel en velden in uw database. Deze instellingen worden gerespecteerd bij het opvragen van de tabel. Zorg ervoor dat ze zijn ingesteld. Gebruik UTF-8-namen met de sortering die is ingesteld in uw db.

Uw commentaar:

Laten we citeren uit de MySQL-handleiding om dit te bewijzen:

Mijn antwoord:Het werkt impliciet, tenzij je tabellen dit expliciet veranderen.

Vraag van commentaar:

Voorbeeld:kolomsortering overschrijft tabelsortering

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

Als zowel KARAKTERSET X als COLLATE Y zijn opgegeven in een kolom, worden tekenset X en sortering Y gebruikt. De kolom heeft tekenset utf8 en sortering utf8_unicode_ci zoals gespecificeerd in de tabelkolom, terwijl de tabel in latin1 + latin1_bin staat.

Voorbeeld:in het algemeen wordt tabelsortering gebruikt

Als sortering niet expliciet is opgegeven voor een kolom/veld, wordt de tabelsortering gebruikt:

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

col1 heeft sortering latin1_bin.

Als je utf8_unicode_ci . wilt sortering, stel het in op uw tabellen in het algemeen of op de kolommen/velden.



  1. Hoe de dataset te vullen met C# uit de Oracle-database

  2. Vind entiteiten waarnaar wordt verwezen in SQL Server:sys.dm_sql_referenced_entities

  3. Regex om overeen te komen met MySQL-opmerkingen

  4. Berekening van het aantal volledige maanden tussen twee datums in SQL