Я не совсем понимаю, когда я делаю обычную вставку числовых данных в поле varchar , почему он оставил его на 2 пробела. Разве не varchar должен обрезать пробелы (trailing ok ... но где правило, что вы «frontpad» с пробелами). Почему тогда панель с 2-х ведущих пространствамиTeradata SQL VARCHAR и пробелы
INSERT INTO v VALUES (,1243444,3455435,8768810,'fdff',5,7,8,,)
Здесь (,1243444,3455435,8768810,'fdff',5,7,8,,)
являются (someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)
Так данные выглядят как этот
SEL CHAR2HEXINT (colA) ,colA FROM v
313732353732 172572 /* this is some other pre-existing value*/
2020202033343535343335 3455435 /* this is value just inserted */
Итак, если вы видите выше 20202020
Hex для 2 spaces aka ' '
2 Вопроса (не продолжение вышеуказанной ситуации)
Также у меня есть данные для VARCHAR (50) Col как этого
HMSA
232434343
HMSA
4343434343
434343434
Здесь HMSA
имеет косое пространство 2020 HEX
, но другие значения не имеют trailing spaces
. Не уверен, что происходит. Теперь здесь нет varchar
Предполагается выбросить все конечные пробелы? как поступают данные с HMSA<space>
Не уверен. Есть идеи ?
Ok так что давайте посмотрим на некоторые странности Исходя из этого:
insert ('yada ') into tb /* tb is volatile & SET.There are 4 spaces */
insert ('yada') into tb
Query Failed. 2802: Duplicate row error in tb
Хорошо видеть, что это выглядит как
7961646120202020 yada /*There are 4 spaces - 20 x 4 */
Так на 2-вкладышем она сбросила сравнения пространство часть и сделал a trim(oldvalue) vs trim (new value)
Спасибо .... Дитер, как всегда, замечательный объяснение и «новые новости» на так многие распространенные вещи, происходящие в мире db. Надеемся, что многие найдут этот ценный q & полезный – user1874594