diff --git a/src/server/shared/DataStores/DBCDatabaseLoader.cpp b/src/server/shared/DataStores/DBCDatabaseLoader.cpp index 6dae29ad42..18eb09ffd4 100644 --- a/src/server/shared/DataStores/DBCDatabaseLoader.cpp +++ b/src/server/shared/DataStores/DBCDatabaseLoader.cpp @@ -74,11 +74,11 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) { Field* fields = result->Fetch(); uint32 indexValue = fields[_sqlIndexPos].Get(); - char* dataValue = indexTable[indexValue]; + char* oldDataValue = indexTable[indexValue]; // If exist in DBC file override from DB newIndexes[newRecords] = indexValue; - dataValue = &dataTable[newRecords++ * _recordSize]; + char* dataValue = &dataTable[newRecords++ * _recordSize]; uint32 dataOffset = 0; uint32 sqlColumnNumber = 0; @@ -102,7 +102,12 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) dataOffset += sizeof(uint8); break; case FT_STRING: - *reinterpret_cast(&dataValue[dataOffset]) = CloneStringToPool(fields[sqlColumnNumber].Get()); + // an empty column means "not overridden", not "blank it" + if (fields[sqlColumnNumber].Get().empty() && oldDataValue) + *reinterpret_cast(&dataValue[dataOffset]) = *reinterpret_cast(&oldDataValue[dataOffset]); + else + *reinterpret_cast(&dataValue[dataOffset]) = CloneStringToPool(fields[sqlColumnNumber].Get()); + dataOffset += sizeof(char*); break; case FT_SORT: