За последние 24 часа нас посетили 24307 программистов и 1568 роботов. Сейчас ищут 1336 программистов ...

GS - разделитель. Сохранение в БД.

Тема в разделе "PHP для новичков", создана пользователем IvanKut, 26 сен 2024.

  1. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    264
    Симпатии:
    0
    Всем привет

    Открыл CSV фаил в UTF-8 и вижу в notepad++ спец символ GS в sublime text он выглядит как <0x1d>

    Прочитав в сети я понял, что это какой-то спец разделитель. У меня стоит задача забрать данные из CSV и сохранить его в базу данных Mysql.

    Вопрос - какой правильно использовать тип данных, чтобы этот разделитель не подменился. Суть в том, что это данные для этикетки системы Честный знак, и если этот разделитель сохраниться не правильно, то этикетка не считается.

    Прикрепил пример. Впринципе как в PHP можно строчку запринтить чтобы понять какой там спец символ чтобы сохранить что было считав с файла, что стало после сохранения в базу(вытащив и сверив)

    Спасибо
     

    Вложения:

    • testQr.txt
      Размер файла:
      34 байт
      Просмотров:
      6
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.846
    Симпатии:
    744
    Адрес:
    Татарстан
    если вы читаете файл и используете разделитель именно для разделения - а в БД уже записываете результат полей - то по барабану... он там фигурировать не будет....
    если просто нужно сохранить данные из файла 1 в 1 - все зависит от его размера... если всегда маленький - до 255 то можно просто varchar
    если большой - shortText, Text, BigText
    главное - чтоб в нужной кодировке ...)))
    думаю utf8_mb4 вполне подойдет
     
    IvanKut нравится это.
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.819
    Симпатии:
    648
    Бинарный (VARBINARY, BLOB и т.п.). Так точно ничего не потеряете. Только макс. длину учитывайте.
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    367
    Симпатии:
    67
    Адрес:
    Бавария, Германия
    Добрый день!
    Если в Вашем случае поля разделены не запятой, а символом GS, то Вам нужно либо заменить GS на запятые
    PHP:
    1. $str = str_replace(chr(29),",",$str);
    Либо в notepad++ смаркировать GS и заменить на запятые.
    Либо в phpMyAdmin в Import выбрать тип данных CSV и изменить в настройках импорта разделитель полей - запятая на GS.
    Символ GS можно скопировать из notepad++ (в формуляре настроек он отображаться не будет)
    Удачи!
     
    #4 Vladimir Kheifets, 26 сен 2024
    Последнее редактирование: 26 сен 2024
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.819
    Симпатии:
    648
    P.S. Просто BINARY не рекомендуется использовать при сохранении бинарников переменной длины (из-за заполнителя ноль-байта).
     
  6. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    264
    Симпатии:
    0
    Я читаю фаил построчно - и результат строки сохраняю в БД, то есть это содержимое QR кода - каждое новое значение с новой строчки.
    Заменять что-то не хотелось, не дай бог что побьется. Думал именно как решить задачу - чтобы сохранить так, чтобы в БД не изменилось.

    Я знаете что не понимаю, вот например я считал из файла строчку - как проверить что этот GS не поменялся. Как распечатать строку, чтобы проверить - что там осталось GS?

    Потом попробую записать в БД, считать - и опять вывести и посмотреть GS сохраниться или нет.

    Я понимаю идеи что Вы ниже писали - типа замени GS на другой знак, потом при считке замени обработно на GS.

    Но вариат с замой опасный, так как может малоли что поменяют в системе честный знак и у нас маркировка товара полетит(
     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    367
    Симпатии:
    67
    Адрес:
    Бавария, Германия
    В начале Вы написали
    Если это CSV, то нужно акцептировать GS как разделитель полей таблицы.
    Однако, возвожно, что это не CSV, нужно смотреть описание структуры данных в документации.
    Обычно описывают всё подробно - поля таблиц, тип данных при сохранение в MySql.
    Приложите, пожалуйста, весь файл. М.б. там есть и другие символы, например,
     
  8. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    367
    Симпатии:
    67
    Адрес:
    Бавария, Германия
    (дополнение)
    То, что показали это не CSV,
    Это текстовое представление QR кода. В них применяются символы разделители GS RS EOT.
    По идее, в MySql нужно сохранять ту информацию, которая содержится в QR коде т.е. его нужно декодировать
    либо сохранять текст без изменений (см. выше совет от miketomlin)