Member 11010948 Ответов: 1

В чем разница между CHAR, текстовыми типами данных в базе данных mysql


Я знаю, что это глупый вопрос, но я понимаю из этой ссылки

С Mysql :: Mysql С 8.0 Справочник :: 10.10.1 Юникод Кодировок[^]

MySQL :: MySQL 8.0 Справочное Руководство :: 11.7 Требования К Хранению Типов Данных[^]

этот символ поддерживает широкий символ, например: Unicode, Utf8 и т. д.
Но текст - это только строковая поддержка только AnsiC.

Если это так...

Его несоответствие концепции типа данных языка Си, которая указывает CHAR как AnsiC string.

Как понять Теоретизм Mysql ?

Что я уже пробовал:

Я попробовал ввести текст как utf8, и он также вернул utf8.

KarstenK

Будьте очень осторожны, лучше всего не использовать текст. Это позволяет избежать ошибок, когда некоторые текстовые операции используют базу данных.

OriginalGriff абсолютно прав.

1 Ответов

Рейтинг:
2

OriginalGriff

ANSI C использует набор символов ASCII charact6ers, который представляет собой 7-битный кодовый набор с ограниченным диапазоном доступных символов. Они точно соответствуют "нижним 128" набору символов Юникода, поэтому хранение ASCII в Юникоде тривиально. Но иду в другую сторону ...

Unicode имеет больше доступных символов - это фактически 16 - битный набор кодов-и UTF8 хранит большинство символов в одном 8-битном байте, который действительно вписывается в символ, поскольку на самом деле он хранится как 8-битное значение, а не 7 бит. Но... как только вы выходите за пределы "базовых" наборов символов, это становится проблемой, и количество байтов, необходимых для хранения символа UTF, не фиксируется на одном (как ASCII) - он гибок, поэтому он может хранить более широкие значения Unicode в серии 8-битных символов.

Таким образом, хотя вы можете указать "десять символов" в текстовых полях и получить 10 символов ASCII каждый раз, вы не можете обязательно хранить там 10 символов Unicode, даже если они являются UTF8, поскольку количество байтов, необходимых для хранения десяти символов, может быть от десяти до двадцати в зависимости от фактических данных, которые вы храните.

Поля CHAR выделяют 16 бит на символ, поэтому весь набор символов Unicode всегда может быть сохранен.

Если вы сомневаетесь, всегда используйте символ CHAR, а не текст.


Member 11010948

Наоборот. В кодировке ASCII используются POSIX и ANSI В-С-7 битов символьного набора! Размер ASCII-1 байт, UNICODE-2 байта. и вы не ответили на мой вопрос. может ли текст также получить 16-битный размер символа ?

Maciej Los

Пожалуйста, взгляните сюда: Разница между VARCHAR и текстом в mysql - переполнение стека[^]