Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да посочите съпоставяне с PDO без ИМЕНА НА SET?

Ето отговор две в едно.

Можете да зададете това в DSN или като MYSQL_ATTR_INIT_COMMAND (опции за свързване).

Според мен DSN е по-добър.

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

Ако посочите UTF-8 работите със съпоставянето по подразбиране на utf8_general_ci , освен ако вашата db таблица или поле не използва нещо различно.

Ако искате целият сървър да отговори с това съпоставяне по подразбиране, използвайте конфигурационни директиви:

collation_server=utf8_unicode_ci 
character_set_server=utf8

Така че не е нужно да го указвате при свързване всеки път.

Съпоставянията влияят върху сортирането на знаците и се задават върху таблицата и полетата във вашата база данни. Тези настройки се спазват при запитване към таблицата. Уверете се, че са зададени. Използвайте UTF-8 имена със съпоставянето, зададено във вашата база данни.

Вашият коментар:

Нека цитираме от Ръководството за MySQL за да докаже това:

Моят отговор:Работи имплицитно, освен ако вашите таблици не променят това изрично.

Въпрос от коментар:

Пример:Съпоставянето на колони отменя съпоставянето на таблици

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

Ако в колона са посочени и двата символа X и COLLATE Y, се използват набор от знаци X и съпоставяне Y. Колоната има набор от знаци utf8 и съпоставяне utf8_unicode_ci както е посочено в колоната на таблицата, докато таблицата е на latin1 + latin1_bin.

Пример:обикновено се използва сортиране на таблици

Ако съпоставянето не е изрично посочено в колона/поле, тогава се използва съпоставянето на таблицата:

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

col1 има съпоставяне latin1_bin.

Ако искате utf8_unicode_ci сортиране, задайте го на вашите таблици като цяло или на колоните/полетата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо все още имам нужда от MySQL Connector, инсталиран на компютъра, въпреки че имам правилните пакети NuGet?

  2. Качване на blob файлове/изображения в Mysql

  3. Как да видите грешка в заявката в PDO PHP

  4. Как да възстановите дъмп на MySQL от хост към Docker контейнер

  5. Как да получите записи за последните 15 дни в MySQL