Всем привет Открыл CSV фаил в UTF-8 и вижу в notepad++ спец символ GS в sublime text он выглядит как <0x1d> Прочитав в сети я понял, что это какой-то спец разделитель. У меня стоит задача забрать данные из CSV и сохранить его в базу данных Mysql. Вопрос - какой правильно использовать тип данных, чтобы этот разделитель не подменился. Суть в том, что это данные для этикетки системы Честный знак, и если этот разделитель сохраниться не правильно, то этикетка не считается. Прикрепил пример. Впринципе как в PHP можно строчку запринтить чтобы понять какой там спец символ чтобы сохранить что было считав с файла, что стало после сохранения в базу(вытащив и сверив) Спасибо
если вы читаете файл и используете разделитель именно для разделения - а в БД уже записываете результат полей - то по барабану... он там фигурировать не будет.... если просто нужно сохранить данные из файла 1 в 1 - все зависит от его размера... если всегда маленький - до 255 то можно просто varchar если большой - shortText, Text, BigText главное - чтоб в нужной кодировке ...))) думаю utf8_mb4 вполне подойдет
Добрый день! Если в Вашем случае поля разделены не запятой, а символом GS, то Вам нужно либо заменить GS на запятые PHP: $str = str_replace(chr(29),",",$str); Либо в notepad++ смаркировать GS и заменить на запятые. Либо в phpMyAdmin в Import выбрать тип данных CSV и изменить в настройках импорта разделитель полей - запятая на GS. Символ GS можно скопировать из notepad++ (в формуляре настроек он отображаться не будет) Удачи!
P.S. Просто BINARY не рекомендуется использовать при сохранении бинарников переменной длины (из-за заполнителя ноль-байта).
Я читаю фаил построчно - и результат строки сохраняю в БД, то есть это содержимое QR кода - каждое новое значение с новой строчки. Заменять что-то не хотелось, не дай бог что побьется. Думал именно как решить задачу - чтобы сохранить так, чтобы в БД не изменилось. Я знаете что не понимаю, вот например я считал из файла строчку - как проверить что этот GS не поменялся. Как распечатать строку, чтобы проверить - что там осталось GS? Потом попробую записать в БД, считать - и опять вывести и посмотреть GS сохраниться или нет. Я понимаю идеи что Вы ниже писали - типа замени GS на другой знак, потом при считке замени обработно на GS. Но вариат с замой опасный, так как может малоли что поменяют в системе честный знак и у нас маркировка товара полетит(
В начале Вы написали Если это CSV, то нужно акцептировать GS как разделитель полей таблицы. Однако, возвожно, что это не CSV, нужно смотреть описание структуры данных в документации. Обычно описывают всё подробно - поля таблиц, тип данных при сохранение в MySql. Приложите, пожалуйста, весь файл. М.б. там есть и другие символы, например,
(дополнение) То, что показали это не CSV, Это текстовое представление QR кода. В них применяются символы разделители GS RS EOT. По идее, в MySql нужно сохранять ту информацию, которая содержится в QR коде т.е. его нужно декодировать либо сохранять текст без изменений (см. выше совет от miketomlin)