За последние 24 часа нас посетили 52327 программистов и 1723 робота. Сейчас ищут 862 программиста ...

Кодировка Excel-PHP-MSSQL

Тема в разделе "Прочие вопросы по PHP", создана пользователем frostdestroyer, 23 ноя 2015.

  1. frostdestroyer

    frostdestroyer Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    5
    Симпатии:
    0
    проблема при переносе данных из Excel:
    перед вставкой в таблицу Address делаю проверку на дубли. проверка не возвращает результата. пробую вставить строку в таблицу и получаю ограничение уникальности - такая строка уже есть.
    Перехожу в SSMS, выполняю простой запрос
    Код (PHP):
    1. select top 100 * from ADDRESS
    2. where Town = 'Cанкт-Петербург' 
    в этом запросе 'Санкт-Петербург' пишу руками и запрос возвращает результат.
    Меняю Санкт-Петербург на Санкт-Петербург, но взятый из дебаггера PHPStorm (выглядит точно так же).
    Запрос перестает возвращать данные.

    Каким образом заставить запрос работать с неправильной кодировкой?

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    При подключении из PHP к MSSQL можно задать кодировку в которой база и кодировку соединения
     
  3. frostdestroyer

    frostdestroyer Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    5
    Симпатии:
    0
    соединение хорошо работает. данные я могу забрать и вывести, кракозябр нет.
    проблема возникает, когда забираю данные из xlsx-файлика через PHPExcel и пытаюсь проверить на уникальность. в файлике есть столбец Town. В нем значение 'Санкт-Петербург'. Я делаю запрос к БД, который написал выше. Запрос не возвращает результатов. Перехожу в SSMS и пишу точно такой же запрос руками - результаты есть.
    Пишу в php такой же запрос, только 'Санкт-Петербург' пишу статично, а не в качестве параметра - запрос возвращает результаты.
    Беру значение 'Санкт-Петербург' из Excel - нет результатов. Как убрать эту проблему с кодировкой?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    А почему вы называете это "проблема с кодировкой"? Есть основания винить именно кодировку???

    Может быть дело в каком-нибудь пробеле или где-то латинская буква Си вместо русской Эс?

    Сделайте пожалуйста var_dump($s) для слова, прочитанного из базы и для слова, прочитанного из Excel. И скопируйте сюда оба два варианта.

    Добавлено спустя 27 минут 42 секунды:
    Update: ну да, конечно в вашем примере
    Код (PHP):
    1. select top 100 * from ADDRESS
    2. where Town = 'Cанкт-Петербург' 
    Санкт- начинается с латинской буквы. Может вы это и имели в виду, но как-то неочевидно для читателя )))

    Я бы один раз сделал замену букв в базе чтобы потом с ней работать нормально.
    Код (PHP):
    1. UPDATE ADDRESS SET Town=REPLACE(Town, 'C', 'С') 
    Иллюстрация: http://sqlfiddle.com/#!3/cb72d/1я создал базу с неправильным вариантом написания с латинской буквой
    - первый SELECT - ищу нормальное русское написание и не нахожу
    - делаю UPDATE с REPLACE чтобы исправить все латинские буквы Си на кириллическую Эс
    - второй SELECT - ищу нормальное русское написание и нахожу!
     
  5. frostdestroyer

    frostdestroyer Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    5
    Симпатии:
    0
    artoodetoo, действительно в базе была смесь кириллицы-латиницы. Спасибо!