我有下表:
Name (Int), Id (Int), Description (VARCHAR)
我遇到的问题是描述可能是一段文字(超过100个字符)。
我的问题
1)VARCHAR是否是存储此类数据的合适数据类型?
2)MySQL是否是这种数据的理想存储解决方案,还是应该考虑写入文件?
N.B。我不会查询描述,只是存储数据。
答案 0 :(得分:1)
MySQL(从5.7版开始)在BLOB
列中最多支持65,535个字节。请注意,行的长度(所有列的组合最大大小)也是65,535字节。因为它使用UTF-8,所存储的字符数可能小于此限制(因为UTF-8每个字符使用不同数量的字节)。
请注意,在数据库中,100个字符的存储要求并不重要。像这样的数据库系统可以在一行中存储许多千字节,甚至更大的数据(单个值大小以千兆字节为单位)可以存储在blob列中(TEXT
,TEXT
)。
如果您不想查询数据,如果数据长度可能超过65KiB,那么您应该使用function clearTimerForInput($input) {
var timerId = $input.data('timerId');
if (timerId) {
clearTimeout(timerId);
$input.removeData('timerId')
}
}
function updateServerForInput($input) {
var jqXhr = $input.data('jqXhr');
clearTimerForInput($input);
// Abort an existing ajax call.
// Note: The call still gets to the server,
// but its response will be ignored.
if (jqXhr) {
jqXhr.abort();
$input.removeData('jqXhr');
}
// Update the current value.
$input.data('currentValue', $input.val());
// Make the ajax call.
$input.data('jqXhr', $.ajax({
// ...
});
}
$('#myTable')
.on('focus', ':input', function() {
var $input = $this;
$input.data('currentValue', $input.val());
});
.on('keyup paste', ':input', function() {
var $input = $this;
clearTimerForInput($input);
// Note: Not all keyup events will change the value.
if ($input.val() != $input.data('currentValue')) {
$input.data('timerId', setTimeout(function() {
updateServerForInput($input);
}, 2000);
}
});
.on('blur', ':input', function() {
var $input = $this;
if ($input.val() != $input.data('currentValue')) {
updateServerForInput($input)
}
});
数据类型,它将大尺寸值存储在不同的物理存储位置中使数据查找更昂贵,并阻碍索引。