Мне нужно создать таблицу в другой базе данных на основе выбора типов результатов. Результаты запроса могут отображаться в фактических столбцах таблицы или нет. F.e. Select 1, c from char_length_test
.mysql_fetch_fields возвращает разную длину, а затем ожидается
Как получить фактический размер столбца после оператора select с помощью mysql C api?
Я создал такую таблицу:
CREATE TABLE char_length_test (c char(22))
И используя mysql_real_query
чтобы выполнить этот запрос
SELECT c from char_length_test
Сразу после этого я исполняю mysql_fetch_fields
, чтобы получить длину c
поля и ожидаем, что это будет 22, как в инструкции create table. К сожалению, длина содержит значение 66 (в 3 раза больше, чем я ожидаю). Пробовали разные размеры, но результат тот же, длина всегда в 3 раза больше.
Также используется GDB, чтобы узнать, есть ли какая-либо другая область данных, содержащая ожидаемое значение:
{
name = "c",
org_name = "c",
table = "char_length_test",
org_table = "char_length_test",
db = "database",
catalog = "def",
def = 0x0,
length = 66,
max_length = 0,
name_length = 1,
org_name_length = 1,
table_length = 16,
org_table_length = 16,
db_length = 6,
catalog_length = 3,
def_length = 0,
flags = 0,
decimals = 0,
charsetnr = 33,
type = MYSQL_TYPE_STRING,
extension = 0x0
}
Возможно, используется сортировка. Длина - это количество байтов, поэтому, если сортировка используется с 3 байтами на символ, она утроит объявленную длину строки. По умолчанию mysql использует UTF-8, который составляет 3 байта на символ. – Kickstart
Возможно, вы имеете в виду кодировку? Сортировка предназначена для сортировки. Я попытался установить значение по умолчанию для символа ascii в конце инструкции create, результаты совпадают. Может ли быть так, что mysql использует переменные соединения для определения этого? – aisbaa
Да, извините. Charset. Ascii должен быть одним байтом на символ (плюс любые байты длины и т. Д.). Дважды проверьте, что вы не устанавливаете сопоставление, хотя это приведет к тому, что mysql переместит кодировку по умолчанию для этого столбца – Kickstart