diff --git a/core/lib/Drupal/Core/Config/ConfigCollectionException.php b/core/lib/Drupal/Core/Config/ConfigCollectionException.php
new file mode 100644
index 0000000..430d067
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/ConfigCollectionException.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\ConfigCollectionException.
+ */
+
+namespace Drupal\Core\Config;
+
+/**
+ * Defines an exception thrown when a config collection name is invalid.
+ */
+class ConfigCollectionException extends ConfigException {}
diff --git a/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php b/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php
index 43be83e..41988fc 100644
--- a/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php
+++ b/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\Core\Config;
 
+use Drupal\Component\Utility\String;
+use Drupal\Component\Utility\Unicode;
 use Symfony\Component\EventDispatcher\Event;
 
 /**
@@ -15,6 +17,20 @@
 class ConfigCollectionInfo extends Event {
 
   /**
+   * The maximum length of a collection name.
+   *
+   * The length of a collection name is limited by the maximum key length of
+   * MyISAM tables, which is 1000 bytes or 333 unicode characters.
+   * Configuration object names are up to 250 characters long, so we cap
+   * collection names at 80 characters.
+   *
+   * @see \Drupal\Core\Config\ConfigBase::MAX_NAME_LENGTH
+   * @see \Drupal\Core\Config\DatabaseStorage::schemaDefinition()
+   * @see http://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html
+   */
+  const COLLECTION_MAX_LENGTH = 80;
+
+  /**
    * Configuration collection information keyed by collection name.
    *
    * The value is either the configuration factory override that is responsible
@@ -36,11 +52,17 @@ class ConfigCollectionInfo extends Event {
    * @throws \InvalidArgumentException
    *   Exception thrown if $collection is equal to
    *   \Drupal\Core\Config\StorageInterface::DEFAULT_COLLECTION
+   * @throws \Drupal\Core\Config\ConfigCollectionException
+   *   Exception thrown when $collection length exceeds
+   *   ConfigCollectionInfo::COLLECTION_MAX_LENGTH.
    */
   public function addCollection($collection, ConfigFactoryOverrideInterface $override_service = NULL) {
     if ($collection == StorageInterface::DEFAULT_COLLECTION) {
       throw new \InvalidArgumentException('Can not add the default collection to the ConfigCollectionInfo object');
     }
+    if (Unicode::strlen($collection) > static::COLLECTION_MAX_LENGTH) {
+      throw new ConfigCollectionException(String::format('The collection name !collection is longer than !max_length.', array('!collection' => $collection, '!max_length' => static::COLLECTION_MAX_LENGTH)));
+    }
     $this->collections[$collection] = $override_service;
   }
 
diff --git a/core/lib/Drupal/Core/Config/DatabaseStorage.php b/core/lib/Drupal/Core/Config/DatabaseStorage.php
index 99c638e..a2672bb 100644
--- a/core/lib/Drupal/Core/Config/DatabaseStorage.php
+++ b/core/lib/Drupal/Core/Config/DatabaseStorage.php
@@ -191,14 +191,16 @@ protected static function schemaDefinition() {
         'collection' => array(
           'description' => 'Primary Key: Config object collection.',
           'type' => 'varchar',
-          'length' => 255,
+          // @see \Drupal\Core\Config\ConfigCollectionInfo::COLLECTION_MAX_LENGTH
+          'length' => 80,
           'not null' => TRUE,
           'default' => '',
         ),
         'name' => array(
           'description' => 'Primary Key: Config object name.',
           'type' => 'varchar',
-          'length' => 255,
+          // @see \Drupal\Core\Config\ConfigBase::MAX_NAME_LENGTH
+          'length' => 250,
           'not null' => TRUE,
           'default' => '',
         ),
diff --git a/core/tests/Drupal/Tests/Core/Config/ConfigCollectionInfoTest.php b/core/tests/Drupal/Tests/Core/Config/ConfigCollectionInfoTest.php
new file mode 100644
index 0000000..7b5fe45
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/Config/ConfigCollectionInfoTest.php
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\Config\ConfigCollectionInfoTest.
+ */
+
+namespace Drupal\Tests\Core\Config;
+
+use Drupal\Core\Config\ConfigCollectionInfo;
+use Drupal\Core\Config\StorageInterface;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\Core\Config\ConfigCollectionInfo
+ *
+ * @group Drupal
+ * @group Config
+ */
+class ConfigCollectionInfoTest extends UnitTestCase {
+
+  public static function getInfo() {
+    return array(
+      'description' => '',
+      'name' => '\Drupal\Core\Config\ConfigCollectionInfoTest unit test',
+      'group' => 'Configuration',
+    );
+  }
+
+  /**
+   * @covers ::addCollection
+   * @covers ::getCollectionNames
+   */
+  public function testaddCollection() {
+    $info = new ConfigCollectionInfo();
+    $collection = $this->randomName($info::COLLECTION_MAX_LENGTH);
+    $info->addCollection($collection);
+    $collections = $info->getCollectionNames();
+    $this->assertEquals(array(StorageInterface::DEFAULT_COLLECTION, $collection), $collections);
+    $collections = $info->getCollectionNames(FALSE);
+    $this->assertEquals(array($collection), $collections);
+  }
+
+  /**
+   * @covers ::addCollection
+   * @covers ::getCollectionNames
+   */
+  public function testaddCollectionWithOverrideService() {
+    $info = new ConfigCollectionInfo();
+    $collection_with_service = $this->randomName($info::COLLECTION_MAX_LENGTH);
+    $overrider = $this->getMock('\Drupal\Core\Config\ConfigFactoryOverrideInterface');
+    $info->addCollection($collection_with_service, $overrider);
+    $collection_without_service = $this->randomName($info::COLLECTION_MAX_LENGTH -1);
+    $info->addCollection($collection_without_service);
+
+    $this->assertEquals($overrider, $info->getOverrideService($collection_with_service));
+    $this->assertNull($info->getOverrideService($collection_without_service));
+  }
+
+  /**
+   * @covers ::addCollection
+   * @expectedException \Drupal\Core\Config\ConfigCollectionException
+   */
+  public function testaddCollectionConfigCollectionException() {
+    $info = new ConfigCollectionInfo();
+    $info->addCollection($this->randomName($info::COLLECTION_MAX_LENGTH + 1));
+  }
+
+  /**
+   * @covers ::addCollection
+   * @expectedException \InvalidArgumentException
+   */
+  public function testaddCollectionInvalidArgumentException() {
+    $info = new ConfigCollectionInfo();
+    $info->addCollection(StorageInterface::DEFAULT_COLLECTION);
+  }
+
+}
