2013-03-14 6 views
0

У меня проблема с символами á, Á, ó, Ó, ú, Ú, í, Í, é, É хранится в нашей mysql DB как странные символы. Мы используем PDO для вставки в БД.Проблема с кодировкой UTF8?

Странно, что у меня есть локальная копия сайта на моем компьютере на WAMP, все работает нормально, и нет проблемы с кодировкой. Живой сайт находится на сервере Linux, если это может иметь значение.

Локальная БД - это копия живой БД, поэтому вся кодировка одинакова во всех таблицах.

Я попытался установить кодировку PDO:

$ PDO = новый PDO ('MySQL: Host =' Настройки :: DBHostName(); Charset = utf8; имя_бд = 'Настройки :: DbName...(), Settings :: DBUsername(), Settings :: DBPassword(), array ( PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION ));

Любые другие предложения? Я не понимаю, почему это будет работать локально, а не на нашем сайте?

+1

PDO :: MYSQL_ATTR_INIT_COMMAND => «УСТАНОВИТЬ НАЗВАНИЯ utf8», похоже, исправить. –

+0

Вы хотите 'utf8mb4', не меньше,' SET NAMES utf8mb4' [** читать все о том, почему это так **] (https://stackoverflow.com/questions/279170/utf-8-all-the- способ сквозной) – Martin

ответ

1

Для версий PHP начиная с 5.3.6 вы должны установить кодировку в DSN.
Для всех остальных, выдающих обычный запрос SET NAMES, является единственным выбором.

0

Последний параметр вызова конструктора PDO - это конкретные параметры драйвера, заданные как массив с парами ключ => значение. У драйвера MySQL есть опция PDO :: MYSQL_ATTR_INIT_COMMAND, где вы можете указать команду, которая выполняется каждый раз, когда вы подключаетесь к базе данных. Вы можете использовать специфический для MySQL запрос SET NAMES utf8 как значение для команды init, чтобы сообщить MySQL использовать UTF-8 как набор символов для нашего соединения.

$pdo = new PDO('mysql:host=mysql.host.com;dbname=db;array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"', 
'database', 'password'); 
Смежные вопросы