Miałem to wcześniej w moim normalnym połączeniu mysql_ *:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Czy potrzebuję go do PDO? A gdzie powinienem to mieć?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Odpowiedzi:
Będziesz miał go w swoim ciągu połączenia, takim jak:
JEDNAK przed wersją PHP 5.3.6 opcja charset była ignorowana. Jeśli używasz starszej wersji PHP, musisz to zrobić w następujący sposób:
źródło
Przed PHP 5.3.6 opcja charset była ignorowana. Jeśli używasz starszej wersji PHP, musisz to zrobić w następujący sposób:
źródło
Jest to prawdopodobnie najbardziej elegancki sposób na zrobienie tego.
Bezpośrednio w wywołaniu konstruktora PDO, ale unikając opcji błędnego zestawu znaków (jak wspomniano powyżej):
Działa świetnie dla mnie.
źródło
array(1002 => 'SET NAMES utf8',...)
.charset=utf8
ciągu dsn działa! Próbowałem rozwiązać ten problem pod adresem groups.google.com/d/msg/auraphp/syMS26Rz-q8/9laQr9tR4EoJDla kompletności istnieją trzy sposoby ustawienia kodowania podczas łączenia się z MySQL z PDO, a które są dostępne, zależą od twojej wersji PHP. Kolejność preferencji byłaby następująca:
charset
parametr w ciągu DSNSET NAMES utf8
zPDO::MYSQL_ATTR_INIT_COMMAND
opcją połączeniaSET NAMES utf8
ręcznieTen przykładowy kod implementuje wszystkie trzy:
Wykonanie wszystkich trzech czynności jest prawdopodobnie przesadą (chyba że piszesz zajęcia, które planujesz rozpowszechniać lub wykorzystywać ponownie).
źródło
Chcę tylko dodać, że musisz upewnić się, że twoja baza danych jest tworzona przy użyciu COLLATE utf8_general_ci lub dowolnego sortowania, którego chcesz użyć, w przeciwnym razie możesz skończyć z inną niż zamierzona.
W phpmyadmin możesz zobaczyć sortowanie, klikając bazę danych i wybierając operacje. Jeśli spróbujesz utworzyć tabele z innym zestawieniem niż baza danych, tabele i tak zakończą się zestawieniem bazy danych.
Upewnij się więc, że sortowanie bazy danych jest prawidłowe przed utworzeniem tabel. Mam nadzieję, że to oszczędza komuś kilka godzin lol
źródło
Myślę, że potrzebujesz dodatkowego zapytania, ponieważ opcja charset w DSN jest faktycznie ignorowana. patrz link opublikowany w komentarzu do innej odpowiedzi.
Patrząc, jak Drupal 7 robi to w http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__construct/7 :
źródło
źródło
źródło
Testuję ten kod i
źródło
$ con = nowy PDO („mysql: host = $ dbhost; dbname = $ baza danych; charset = $ encoding ”, „$ dbuser”, „$ dbpassword”);
źródło