|
|
|
| Всем привет!
В чем, собственно, вопрос: строки, содержащие одно и тоже количество символов, а точнее - одни и те же символы, воспринимаются всеми операторами сравнения, строковыми функциями и пр. как РАЗНЫЕ строки...
Ситуация такая: эти две строки (которые по идее одинаковы) хранятся в разных базах данных, но кодировка у этих баз одинаковая (UTF-8), и вообще, везде, где можно, установлена именно эта кодировка (то есть кодировка самих скриптов и все прочее...)
Вот пример: имеем две одинаковые строки 'N-0903', одна из которых получена из одной базы, а вторая - из другой базы...Для одной из этих строк функция strlen() дает длину 6, а для другой - 9...
То есть похоже на то, будто бы эти строки в разных кодировках, потому и длина получается разная... Но, повторюсь, кодировка в обоих базах установлена в UTF-8...
Подскажите хотя бы, куда смотреть и где искать решение...
Заранее благодарен, если кто заинтересуется вопросом... | |
|
|
|
|
|
|
|
для: vtos
(19.11.2009 в 12:20)
| | блин ,очень интересно.Я бы проверил строку на \n \r и  ...Может записывает дополнительные симовлы.
Кусочек кода дай,чисто порешать подумать... | |
|
|
|
|
|
|
|
для: emme_lated
(19.11.2009 в 12:25)
| | emme_lated, код там элементарен по своей сути, там просто в определенный момент обработки данных, полученных из базы, производится сравнение элементов массива... Код тут ничего не скажет. А проблема была в том, о чем было написано в самом же вопросе...
В одну из баз данные поступают путем загрузки CSV-файла. Так вот, вбив в эту базу эту самую строку 'N-0903' вручную, а не через загрузку csv-файла, я "сделал" ее равной той строке, из другой базы...Теперь их сравнение закончилось положительным результатом, т.е. теперь они равны! Т.е. через "ручной" ввод (т.е. через phpmyadmin) данные попали в базу в "нужной" кодировке.
К тому же оказалось, что я поторопился утверждать, что все файлы у меня в UTF-8, т.е. сами скрипты. Не все они были в этой кодировке, ошибся я... Значит, все же кодировки "поехали", в этом вся и проблема. Но она уже решается!
Спасибо всем, кто заинтересовался! | |
|
|
|
|
|
|
|
для: vtos
(19.11.2009 в 12:20)
| | bin2hex() | |
|
|
|
|
|
|
|
для: Trianon
(19.11.2009 в 12:34)
| | Спасибо, интересная функция, она может быть полезна. | |
|
|
|
|
|
|
|
для: vtos
(19.11.2009 в 12:20)
| | Не должно такого быть
, если данные на самом деле одинаковые, пусть даже базы хранят их в разной кодировке
, сервер возвращает их в ккодировке установленной переменной character_set_client
или может поменять её, если получит запрос 'SET NAMES "cp1251"'
В течении одного соединения с одним сервером
два результата могут прийти в разных кодировках
только если между запросами отправлялось что-то вроде SET NAMES | |
|
|
|
|
|
|
|
для: heed
(19.11.2009 в 13:03)
| | А как происходит сравнение строк в строковых функциях php? Побайтово ведь, это так? А если строки в разных кодировках хранятся, то и их длина, и вообще представление будут ведь разными?
Неужели, сравнив, например strcmp() две строки в разных кодировках, мы получим совпадение? Особенно, если одна из кодировок - UTF-8... Там ведь по два байта на символ... | |
|
|
|
|
|
|
|
для: vtos
(19.11.2009 в 13:10)
| | ну вбил ты вручную строку,А в чем проблема то была?? думаю строки были типа "N-093" и "N-093 " ..
то есть лишние пробелы | |
|
|
|
|
|
|
|
для: emme_lated
(19.11.2009 в 13:14)
| | Не было пробелов там.
Просто именно функции php для работы со строками и просто оператор сравнения "видели" эти строки разными...
Проблема была в том, что либо сам файл csv, либо файл со скриптом, который грузит csv в базу, были не в utf-8. Данные были загружены какое-то время назад, и получилось так, что они не в той кодировке туда попали, хотя отображались корректно... Можт смутно объяснил, но все же дело в этом... | |
|
|
|
|
|
|
|
для: vtos
(19.11.2009 в 13:24)
| | Кстати может дело в кодировке самой страницы.Я когда сохраняю index.php -спрашивают,или в виндовс или в utf-8 или koir-8....Вибираю виндовс1251...Чето такое. | |
|
|
|
|
|
|
|
для: vtos
(19.11.2009 в 12:20)
| | Посмотрите символ тире - он разный бывает, покороче, подлинее, ещё длинее - это разные символы - возможно в этом дело. | |
|
|
|