Почему MySQL substr возвращает значение в тексте типа данных, если длина превышает 512?

#mysql #text #varchar #substr

Вопрос:

Я заметил, что MySQL substr() возвращает значение в тексте типа данных, когда длина превышает 512.

Пожалуйста, ознакомьтесь с приведенным ниже примером;

Таблица данных:

 create table temp10( c0 int primary key auto_increment, c1 varchar(2500));
insert into temp10(c1) values ('abcd');
 

Вторичная таблица, использующая temp10 в качестве источника;

 create table temp11 as
    select c1, 
    substr(c1, 1, 10) as c2, 
    substr(c1, 1, 100) as c3, 
    substr(c1, 1, 512) as c4, 
    substr(c1, 1, 513) as c5, 
    substr(c1, 1, 2500) as c6
    from temp10; 
 

Структура созданной таблицы является;

Таблица: Столбцы temp11:

 c1 varchar(2500) 
c2 varchar(10) 
c3 varchar(100) 
c4 varchar(512) 
c5 text 
c6 text
 

Является ли это ожидаемым/ документированным поведением?

Такое же поведение было замечено и для подзапросов, вложенных в предложение select.

Комментарии:

1. Хорошее наблюдение. Насколько я могу судить, в документации это, похоже, не описано. Вот демонстрация проблемы: dbfiddle.uk/..

2. основная проблема заключается в максимальном размере строки, и если вы берете текст, он хранится «снаружи», поэтому хороший выбор для использования ТЕКСТА