моя проблема очень странная, я думаю. Я пытаюсь использовать следующий код SQL:
SELECT `name` FROM `table` WHERE `id` = 'roman' GROUP by `name`
и он возвращает мне нулевое значение, я уверен, что код правильный, потому что он работает с другими таблицами. Я заметил, что если я иду к столу, уберите id
значение, а затем введите его снова вручную, он работает просто отлично (даже если остальные значения выглядят одинаково). Моя таблица была импортирована из CSV-файла, но я уверен, что у меня нет пробелов / букв / неправильных символов и т. Д. В конце строк (даже проверено это с помощью HexEdit). Например, если я использую:
SELECT `name` FROM `table` WHERE `id` LIKE 'roman%' GROUP by `name`
затем это работает, так что кажется, что-то не так со значениями идентификатора. Я тоже пытался изменить кодировку.
Наиболее вероятное объяснение состоит в том, что в столбце хранится непечатный символ, вероятно, возврат каретки, табуляция или перевод строки.
Чтобы выяснить это, попробуйте получить шестнадцатеричное представление сохраненного значения и длину в байтах.
SELECT HEX('roman')
, LENGTH('roman')
, HEX(t.id)
, LENGTH(t.id)
FROM mytable t
WHERE t.id <> 'roman'
AND t.id LIKE 'roman%'
(Возможно, что происходит преобразование набора символов. Тот же самый запрос выше покажет некоторые детали.)
В конце сохраненного значения есть символ возврата каретки, десятичное значение 13. Сравнить с:
SELECT HEX('roman\r')
HEX('roman\r')
----------------
726F6D616E0D
^^
Чтобы удалить ВСЕ вхождения символов возврата каретки из id
столбец (не только конечный), вы можете использовать REPLACE
функция.
SELECT HEX(REPLACE('ro\rman\r','\r',''))
HEX(REPLACE('ro\rman\r','\r',''))
-----------------------------------
726F6D616E
в выражении UPDATE, например
UPDATE mytable SET id = REPLACE(id,'\r','')
Если id
последнее поле в файле .csv, вероятно, в файле строки заканчивались в стиле DOS, с возвратом каретки и переводом строки; и процесс, который считывал входной файл, удалял только перевод строки и оставлял возврат каретки как часть данных.
Похоже, это было вызвано импортом CSV, все значения из последнего столбца имеют дополнительный символ разрыва строки. Я пробовал следующий код:
ВЫБРАТЬ name
ОТ table
ГДЕ id
LIKE ‘Roman_‘ Группа по name
поэтому он «пропустит» последний символ и все равно не выберет другие мои значения, такие как: roman_string roman_string2 и т. д. Возможно, это не лучшее решение, но это лучше, чем тратить много времени на восстановление сценария импорта CSV-файла 🙂 Спасибо