diff -u b/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
--- b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
@@ -441,9 +441,8 @@
       'fields' => array(
         'cid' => array(
           'description' => 'Primary Key: Unique cache ID.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
           'binary' => TRUE,
@@ -483,8 +482,7 @@
         ),
         'checksum' => array(
           'description' => 'The tag invalidation checksum when this entry was saved.',
-          'type' => 'varchar',
-          'is_ascii' => TRUE,
+          'type' => 'varchar_ascii',
           'length' => 255,
           'not null' => TRUE,
         ),
diff -u b/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php b/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php
--- b/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php
@@ -175,9 +175,8 @@
       'fields' => array(
         'tag' => array(
           'description' => 'Namespace-prefixed tag string.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
         ),
diff -u b/core/lib/Drupal/Core/Config/DatabaseStorage.php b/core/lib/Drupal/Core/Config/DatabaseStorage.php
--- b/core/lib/Drupal/Core/Config/DatabaseStorage.php
+++ b/core/lib/Drupal/Core/Config/DatabaseStorage.php
@@ -192,17 +192,15 @@
       'fields' => array(
         'collection' => array(
           'description' => 'Primary Key: Config object collection.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
         ),
         'name' => array(
           'description' => 'Primary Key: Config object name.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
         ),
diff -u b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
--- b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
@@ -144,7 +144,7 @@
       if (!empty($spec['binary'])) {
         $sql .= ' BINARY';
       }
-      if (!empty($spec['is_ascii'])) {
+      if (isset($spec['type']) && $spec['type'] == 'varchar_ascii') {
         $sql .= ' CHARACTER SET ascii COLLATE ascii_general_ci';
       }
     }
@@ -221,6 +221,8 @@
     // database types back into schema types.
     // $map does not use drupal_static as its value never changes.
     static $map = array(
+      'varchar_ascii:normal' => 'VARCHAR',
+
       'varchar:normal'  => 'VARCHAR',
       'char:normal'     => 'CHAR',
 
diff -u b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
--- b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
@@ -1568,10 +1568,9 @@
     }
     else {
       $id_schema = array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'description' => 'The entity id this data is attached to',
       );
     }
@@ -1602,9 +1601,8 @@
       'description' => $description_current,
       'fields' => array(
         'bundle' => array(
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 128,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
           'description' => 'The field instance bundle to which this row belongs, used when deleting a field instance',
@@ -1619,9 +1617,8 @@
         'entity_id' => $id_schema,
         'revision_id' => $revision_id_schema,
         'langcode' => array(
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 32,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
           'description' => 'The language code for this data item.',
diff -u b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
--- b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
@@ -133,11 +133,10 @@
       $columns = array(
         'target_id' => array(
           'description' => 'The ID of the target entity.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           // If the target entities act as bundles for another entity type,
           // their IDs should not exceed the maximum length for bundles.
           'length' => $target_type_info->getBundleOf() ? EntityTypeInterface::BUNDLE_MAX_LENGTH : 255,
-          'is_ascii' => TRUE,
         ),
       );
     }
diff -u b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
--- b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
@@ -43,10 +43,9 @@
     return array(
       'columns' => array(
         'value' => array(
-          'type' => 'varchar',
+          'type' => $field_definition->getSetting('is_ascii') === TRUE ? 'varchar_ascii' : 'varchar',
           'length' => (int) $field_definition->getSetting('max_length'),
           'binary' => $field_definition->getSetting('case_sensitive'),
-          'is_ascii' => $field_definition->getSetting('is_ascii'),
         ),
       ),
     );
diff -u b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
--- b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
+++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
@@ -1193,9 +1193,8 @@
       'fields' => array(
         'menu_name' => array(
           'description' => "The menu name. All links with the same menu name (such as 'tools') are part of the same menu.",
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 32,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => '',
         ),
@@ -1207,23 +1206,20 @@
         ),
         'id' => array(
           'description' => 'Unique machine name: the plugin ID.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
         ),
         'parent' => array(
           'description' => 'The plugin ID for the parent of this link.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
           'not null' => TRUE,
-          'is_ascii' => TRUE,
           'default' => '',
         ),
         'route_name' => array(
           'description' => 'The machine name of a defined Symfony Route this menu item represents.',
-          'type' => 'varchar',
-          'is_ascii' => TRUE,
+          'type' => 'varchar_ascii',
           'length' => 255,
         ),
         'route_param_key' => array(
@@ -1285,9 +1281,8 @@
         ),
         'provider' => array(
           'description' => 'The name of the module that generated this link.',
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => DRUPAL_EXTENSION_NAME_MAX_LENGTH,
-          'is_ascii' => TRUE,
           'not null' => TRUE,
           'default' => 'system',
         ),
reverted:
--- b/core/modules/aggregator/src/ItemsImporter.php
+++ a/core/modules/aggregator/src/ItemsImporter.php
@@ -9,7 +9,6 @@
 
 use Drupal\aggregator\Plugin\AggregatorPluginManager;
 use Drupal\Component\Plugin\Exception\PluginException;
-use Drupal\Component\Utility\Crypt;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Psr\Log\LoggerInterface;
 
@@ -114,7 +113,7 @@
     // We store the hash of feed data in the database. When refreshing a
     // feed we compare stored hash and new hash calculated from downloaded
     // data. If both are equal we say that feed is not updated.
+    $hash = hash('sha256', $feed->source_string);
-    $hash = Crypt::hashBase64('sha256', $feed->source_string);
     $has_new_content = $success && ($feed->getHash() != $hash);
 
     if ($has_new_content) {
diff -u b/core/modules/ban/ban.install b/core/modules/ban/ban.install
--- b/core/modules/ban/ban.install
+++ b/core/modules/ban/ban.install
@@ -20,9 +20,8 @@
       ),
       'ip' => array(
         'description' => 'IP address',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 40,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
diff -u b/core/modules/comment/comment.install b/core/modules/comment/comment.install
--- b/core/modules/comment/comment.install
+++ b/core/modules/comment/comment.install
@@ -46,15 +46,14 @@
         'description' => 'The entity_id of the entity for which the statistics are compiled.',
       ),
       'entity_type' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'not null' => TRUE,
         'default' => 'node',
         'length' => EntityTypeInterface::ID_MAX_LENGTH,
-        'is_ascii' => TRUE,
         'description' => 'The entity_type of the entity to which this comment is a reply.',
       ),
       'field_name' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'not null' => TRUE,
         'default' => '',
         'length' => FieldStorageConfig::NAME_MAX_LENGTH,
diff -u b/core/modules/dblog/dblog.install b/core/modules/dblog/dblog.install
--- b/core/modules/dblog/dblog.install
+++ b/core/modules/dblog/dblog.install
@@ -25,11 +25,10 @@
         'description' => 'The {users}.uid of the user who triggered the event.',
       ),
       'type' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 64,
         'not null' => TRUE,
         'default' => '',
-        'is_ascii' => TRUE,
         'description' => 'Type of log message, for example "user" or "page not found."',
       ),
       'message' => array(
@@ -70,11 +69,10 @@
         'description' => 'URL of referring page.',
       ),
       'hostname' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
         'not null' => TRUE,
         'default' => '',
-        'is_ascii' => TRUE,
         'description' => 'Hostname of the user who triggered the event.',
       ),
       'timestamp' => array(
diff -u b/core/modules/file/file.install b/core/modules/file/file.install
--- b/core/modules/file/file.install
+++ b/core/modules/file/file.install
@@ -20,24 +20,21 @@
       ),
       'module' => array(
         'description' => 'The name of the module that is using the file.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => DRUPAL_EXTENSION_NAME_MAX_LENGTH,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
       'type' => array(
         'description' => 'The name of the object type in which the file is used.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 64,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
       'id' => array(
         'description' => 'The primary key of the object using the file.',
-        'type' => 'varchar',
-        'is_ascii' => TRUE,
+        'type' => 'varchar_ascii',
         'length' => 64,
         'not null' => TRUE,
         'default' => 0,
diff -u b/core/modules/locale/locale.install b/core/modules/locale/locale.install
--- b/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -67,17 +67,15 @@
         'description' => 'The original string in English.',
       ),
       'context' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
         'description' => 'The context this string applies to.',
       ),
       'version' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 20,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => 'none',
         'description' => 'Version of Drupal where the string was last used (for locales optimization).',
@@ -105,9 +103,8 @@
         'description' => 'Translation string value in this language.',
       ),
       'language' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 12,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
         'description' => 'Language code. References {language}.langcode.',
@@ -145,9 +142,8 @@
         'description' => 'Unique identifier of this string.',
       ),
       'type' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 50,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
         'description' => 'The location type (file, config, path, etc).',
@@ -160,9 +156,8 @@
         'description' => 'Type dependent location information (file name, path, etc).',
       ),
       'version' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 20,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => 'none',
         'description' => 'Version of Drupal where the location was found.',
@@ -185,18 +180,16 @@
     'description' => 'File import status information for interface translation files.',
     'fields' => array(
       'project' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => '255',
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'default' => '',
         'description' => 'A unique short name to identify the project the file belongs to.',
       ),
       'langcode' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => '12',
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'default' => '',
         'description' => 'Language code of this translation. References {language}.langcode.',
       ),
diff -u b/core/modules/node/node.install b/core/modules/node/node.install
--- b/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -54,9 +54,8 @@
       ),
       'langcode' => array(
         'description' => 'The {language}.langcode of this node.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 12,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
@@ -76,10 +75,9 @@
       ),
       'realm' => array(
         'description' => 'The realm in which the user must possess the grant ID. Each node access node can define one or more realms.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'default' => '',
       ),
       'grant_view' => array(
diff -u b/core/modules/search/search.install b/core/modules/search/search.install
--- b/core/modules/search/search.install
+++ b/core/modules/search/search.install
@@ -20,17 +20,15 @@
         'description' => 'Search item ID, e.g. node ID for nodes.',
       ),
       'langcode' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => '12',
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'description' => 'The {languages}.langcode of the item variant.',
         'default' => '',
       ),
       'type' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 64,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'description' => 'Type of item, e.g. node.',
       ),
@@ -69,17 +67,15 @@
         'description' => 'The {search_dataset}.sid of the searchable item to which the word belongs.',
       ),
       'langcode' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => '12',
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'description' => 'The {languages}.langcode of the item variant.',
         'default' => '',
       ),
       'type' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 64,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'description' => 'The {search_dataset}.type of the searchable item to which the word belongs.',
       ),
diff -u b/core/modules/shortcut/shortcut.install b/core/modules/shortcut/shortcut.install
--- b/core/modules/shortcut/shortcut.install
+++ b/core/modules/shortcut/shortcut.install
@@ -20,11 +20,10 @@
         'description' => 'The {users}.uid for this set.',
       ),
       'set_name' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 32,
         'not null' => TRUE,
         'default' => '',
-        'is_ascii' => TRUE,
         'description' => "The {shortcut_set}.set_name that will be displayed for this user.",
       ),
     ),
diff -u b/core/modules/simpletest/simpletest.install b/core/modules/simpletest/simpletest.install
--- b/core/modules/simpletest/simpletest.install
+++ b/core/modules/simpletest/simpletest.install
@@ -108,9 +108,8 @@
         'description' => 'Test ID, messages belonging to the same ID are reported together',
       ),
       'test_class' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
         'description' => 'The name of the class that created this message.',
@@ -128,15 +127,14 @@
         'description' => 'The message itself.',
       ),
       'message_group' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'default' => '',
         'description' => 'The message group this message belongs to. For example: warning, browser, user.',
       ),
       'function' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
         'not null' => TRUE,
         'default' => '',
diff -u b/core/modules/system/database.api.php b/core/modules/system/database.api.php
--- b/core/modules/system/database.api.php
+++ b/core/modules/system/database.api.php
@@ -256,6 +256,8 @@
  *       'float', 'numeric', or 'serial'. Most types just map to the according
  *       database engine specific datatypes. Use 'serial' for auto incrementing
  *       fields. This will expand to 'INT auto_increment' on MySQL.
+ *       A special 'varchar_ascii' type is also available for limiting machine
+ *       name field to US ASCII characters.
  *     - 'mysql_type', 'pgsql_type', 'sqlite_type', etc.: If you need to
  *       use a record type not included in the officially supported list
  *       of types above, you can specify a type for each database
@@ -293,9 +295,6 @@
  *       'varchar' or 'text' fields to use case-sensitive binary collation.
  *       This has no effect on other database types for which case sensitivity
  *       is already the default behavior.
- *     - 'is_ascii': A boolean indicating that MySQL should use
- *       ASCII character encoding for the field. This helps index usage be
- *       more efficient, and should be used on machine name fields.
  *     All parameters apart from 'type' are optional except that type
  *     'numeric' columns must specify 'precision' and 'scale', and type
  *     'varchar' must specify the 'length' parameter.
diff -u b/core/modules/system/src/Tests/Database/SchemaTest.php b/core/modules/system/src/Tests/Database/SchemaTest.php
--- b/core/modules/system/src/Tests/Database/SchemaTest.php
+++ b/core/modules/system/src/Tests/Database/SchemaTest.php
@@ -49,11 +49,10 @@
           'default' => "'\"funky default'\"",
           'description' => 'Schema column description for string.',
         ),
-        'test_field_string_is_ascii'  => array(
-          'type' => 'varchar',
+        'test_field_string_ascii'  => array(
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
-          'description' => 'Schema column description for is_ascii string.',
+          'description' => 'Schema column description for ASCII string.',
         ),
       ),
     );
@@ -74,7 +73,7 @@
       if ($column->Field == 'test_field_string') {
         $this->assertTrue($column->Collation == 'utf8_general_ci');
       }
-      if ($column->Field == 'test_field_string_is_ascii') {
+      if ($column->Field == 'test_field_string_ascii') {
         $this->assertTrue($column->Collation == 'ascii_general_ci');
       }
     }
diff -u b/core/modules/system/system.install b/core/modules/system/system.install
--- b/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -685,9 +685,8 @@
       ),
       'token' => array(
         'description' => "A string token generated against the current user's session id and the batch id, used to ensure that only the user who submitted the batch can effectively access it.",
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 64,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
       ),
       'timestamp' => array(
@@ -718,17 +717,15 @@
       ),
       'event' => array(
         'description' => 'Name of event (e.g. contact).',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 64,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
       'identifier' => array(
         'description' => 'Identifier of the visitor, such as an IP address or hostname.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
@@ -757,17 +754,14 @@
     'fields' => array(
       'collection' => array(
         'description' => 'A named collection of key and value pairs.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
       'name' => array(
         'description' => 'The key of the key-value pair. As KEY is a SQL reserved keyword, name was chosen instead.',
-        'type' => 'varchar',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
@@ -786,18 +780,16 @@
     'fields' => array(
       'collection' => array(
         'description' => 'A named collection of key and value pairs.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
       'name' => array(
         // KEY is an SQL reserved word, so use 'name' as the key's field name.
         'description' => 'The key of the key/value pair.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
@@ -831,10 +823,9 @@
         'description' => 'Primary Key: Unique item ID.',
       ),
       'name' => array(
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'default' => '',
         'description' => 'The queue name.',
       ),
@@ -870,9 +861,8 @@
     'fields' => array(
       'name' => array(
         'description' => 'Primary Key: Machine name of this route',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
@@ -920,16 +910,14 @@
     'fields' => array(
       'name' => array(
         'description' => 'Primary Key: Unique name.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 255,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => ''
       ),
       'value' => array(
         'description' => 'A value for the semaphore.',
-        'type' => 'varchar',
-        'is_ascii' => TRUE,
+        'type' => 'varchar_ascii',
         'length' => 255,
         'not null' => TRUE,
         'default' => ''
@@ -972,16 +960,14 @@
       ),
       'sid' => array(
         'description' => "A session ID (hashed). The value is generated by Drupal's session handlers.",
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
       ),
       'hostname' => array(
         'description' => 'The IP address that last used this session ID (sid).',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
@@ -1038,9 +1024,8 @@
       ),
       'langcode' => array(
         'description' => "The language code this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 12,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
diff -u b/core/modules/text/src/Plugin/Field/FieldType/TextLongItem.php b/core/modules/text/src/Plugin/Field/FieldType/TextLongItem.php
--- b/core/modules/text/src/Plugin/Field/FieldType/TextLongItem.php
+++ b/core/modules/text/src/Plugin/Field/FieldType/TextLongItem.php
@@ -34,9 +34,8 @@
           'size' => 'big',
         ),
         'format' => array(
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
         ),
       ),
       'indexes' => array(
diff -u b/core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php b/core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php
--- b/core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php
+++ b/core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php
@@ -68,9 +68,8 @@
           'size' => 'big',
         ),
         'format' => array(
-          'type' => 'varchar',
+          'type' => 'varchar_ascii',
           'length' => 255,
-          'is_ascii' => TRUE,
         ),
       ),
       'indexes' => array(
diff -u b/core/modules/user/user.install b/core/modules/user/user.install
--- b/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -21,18 +21,16 @@
       ),
       'module' => array(
         'description' => 'The name of the module declaring the variable.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => DRUPAL_EXTENSION_NAME_MAX_LENGTH,
-        'is_ascii' => TRUE,
         'not null' => TRUE,
         'default' => '',
       ),
       'name' => array(
         'description' => 'The identifier of the data.',
-        'type' => 'varchar',
+        'type' => 'varchar_ascii',
         'length' => 128,
         'not null' => TRUE,
-        'is_ascii' => TRUE,
         'default' => '',
       ),
       'value' => array(
diff -u b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php
--- b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php
@@ -802,9 +802,8 @@
         'description' => "Data storage for $entity_type_id field $field_name.",
         'fields' => array(
           'bundle' => array(
-            'type' => 'varchar',
+            'type' => 'varchar_ascii',
             'length' => 128,
-            'is_ascii' => true,
             'not null' => true,
             'default' => '',
             'description' => 'The field instance bundle to which this row belongs, used when deleting a field instance',
@@ -829,9 +828,8 @@
             'description' => 'The entity revision id this data is attached to, which for an unversioned entity type is the same as the entity id',
           ),
           'langcode' => array(
-            'type' => 'varchar',
+            'type' => 'varchar_ascii',
             'length' => 32,
-            'is_ascii' => true,
             'not null' => true,
             'default' => '',
             'description' => 'The language code for this data item.',
@@ -949,9 +947,8 @@
         'description' => "Data storage for $entity_type_id field $field_name.",
         'fields' => array(
           'bundle' => array(
-            'type' => 'varchar',
+            'type' => 'varchar_ascii',
             'length' => 128,
-            'is_ascii' => true,
             'not null' => true,
             'default' => '',
             'description' => 'The field instance bundle to which this row belongs, used when deleting a field instance',
@@ -964,23 +961,20 @@
             'description' => 'A boolean indicating whether this data item has been deleted',
           ),
           'entity_id' => array(
-            'type' => 'varchar',
+            'type' => 'varchar_ascii',
             'length' => 128,
             'not null' => true,
-            'is_ascii' => true,
             'description' => 'The entity id this data is attached to',
           ),
           'revision_id' => array(
-            'type' => 'varchar',
+            'type' => 'varchar_ascii',
             'length' => 128,
             'not null' => true,
-            'is_ascii' => true,
             'description' => 'The entity revision id this data is attached to, which for an unversioned entity type is the same as the entity id',
           ),
           'langcode' => array(
-            'type' => 'varchar',
+            'type' => 'varchar_ascii',
             'length' => 32,
-            'is_ascii' => true,
             'not null' => true,
             'default' => '',
             'description' => 'The language code for this data item.',
only in patch2:
unchanged:
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
@@ -363,6 +363,7 @@ function getFieldTypeMap() {
     // database types back into schema types.
     // $map does not use drupal_static as its value never changes.
     static $map = array(
+      'varchar_ascii:normal' => 'varchar',
       'varchar:normal' => 'varchar',
       'char:normal' => 'character',
 
only in patch2:
unchanged:
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
@@ -207,6 +207,8 @@ public function getFieldTypeMap() {
     // database types back into schema types.
     // $map does not use drupal_static as its value never changes.
     static $map = array(
+      'varchar_ascii:normal' => 'VARCHAR',
+
       'varchar:normal'  => 'VARCHAR',
       'char:normal'     => 'CHAR',
 
