MySQL: большой VARCHAR против текста?

Если вам не нужен MySQLdb, но я бы принял любую библиотеку, я бы очень, очень рекомендую MySQL Connector / Python из MySQL: http://dev.mysql.com/downloads/connector/python/ .

Это один пакет (около 110k), чистый Python, поэтому он независим от системы и мертв, простота установки. Вы просто загружаете, дважды щелкаете, подтверждаете лицензионное соглашение и идите. Нет необходимости в Xcode, MacPorts, компиляции, перезапуске ...

Затем вы подключаетесь как:

import mysql.connector    
cnx = mysql.connector.connect(user='scott', password='tiger',
                              host='127.0.0.1',
                              database='employees')

try:
   cursor = cnx.cursor()
   cursor.execute("""
      select 3 from your_table
   """)
   result = cursor.fetchall()
   print result
finally:
    cnx.close()

814
задан Benjamin 23 March 2016 в 23:11
поделиться

3 ответа

  • TEXT и BLOB хранятся вне таблицы, при этом в таблице имеется только указатель на место фактического хранения.

  • VARCHAR хранится в строке с таблицей. VARCHAR быстрее, когда размер является разумным, компромисс будет быстрее зависеть от ваших данных и вашего оборудования, вы захотите сравнить реальный сценарий с вашими данными.

Обновление Хранение VARCHAR или TEXT в строке или вне записи зависит от размера данных, размера столбцов, row_format и версии MySQL. При этом не зависит от "text" vs "varchar".

795
ответ дан 22 November 2019 в 21:14
поделиться

Просто для пояснения наилучшей практики:

  1. Сообщения текстового формата почти всегда должны храниться как TEXT (в конечном итоге они произвольно длинные)

  2. Строковые атрибуты должны храниться как VARCHAR (имя пользователя-получателя, тема и т.д....).

Я понимаю, что у вас есть лимит переднего конца, что очень здорово до тех пор, пока он не станет таковым. *Хитрость в том, чтобы думать о БД отдельно от приложений, которые к ней подключаются. То, что одно приложение накладывает ограничение на данные, не означает, что данные по своей природе ограничены.

Что такое в самих сообщениях, которые заставляют их никогда не быть больше 3000 символов? Если это просто произвольное ограничение приложения (скажем, для текстового поля или чего-то еще), используйте поле TEXT на уровне данных.

.
216
ответ дан 22 November 2019 в 21:14
поделиться

Отказ от ответственности: я не эксперт по MySQL ... но это мое понимание проблем.

Я думаю, что TEXT хранится вне строки mysql, в то время как я думаю, что VARCHAR хранится как часть строки. Существует максимальная длина строки для mysql строк ... так что вы можете ограничить, сколько других данных вы можете хранить в строке, используя VARCHAR.

Также из-за того, что VARCHAR является частью строки, я подозреваю, что запросы, глядя на это поле, будут немного быстрее, чем те, которые используют фрагмент TEXT.

32
ответ дан 22 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: