У меня есть таблица со столбцом, тип которого - varchar (32), его значение -
'Movies & TV'
. Эти данные загружаются командой Копировать, когда я запрашиваю эту таблицу, например
select * from activity where name='Movies & TV' (typed this value)
он не вернет никаких записей, это в основном из-за символа &, с этим персонажем что-то происходит.
Когда я попробовал
Select ISUTF8(name) from activity it returns true
, что означает, что данные фактически хранятся в формате UTF-8.
Select length(name) and length('Movies & TV')
тоже такие же. Однако, когда я вставляю эти значения в редактор vi и вижу лишний пробел в строке БД. Кроме того, имя поля в таблице действий также может содержать символы китайского языка, которые теперь корректно хранятся в БД.
Есть идеи, что здесь происходит? Должен ли я указывать явный UTF-8 при загрузке данных?
Если вы делаете это из SQLPLUS, используйте
SET DEFINE OFF
чтобы остановить его наступление и как особый случай.
Альтернативное решение, используйте конкатенацию и функцию chr
:
SELECT * FROM activity WHERE name= 'Movies ' || chr(38) || ' TV';
Решение от: Как вставить строку, содержащую "&"
Какое отношение SQLPLUS имеет к Vertica?
Может быть, «виноват» не «&». Возможно, у вас есть какой-то другой (невидимый, но все еще закодированный в UTF8) символ в вашей базе данных. Что-то вроде неразрывного пространства, например ...