diff --git a/pydantic/schema.py b/pydantic/schema.py
--- a/pydantic/schema.py
+++ b/pydantic/schema.py
@@ -1,5 +1,6 @@
 import re
 import warnings
+from collections import defaultdict
 from datetime import date, datetime, time, timedelta
 from decimal import Decimal
 from enum import Enum
@@ -64,12 +65,12 @@
 from .typing import (
     NONE_TYPES,
     ForwardRef,
+    all_literal_values,
     get_args,
     get_origin,
     is_callable_type,
     is_literal_type,
     is_namedtuple,
-    literal_values,
 )
 from .utils import ROOT_KEY, get_model, lenient_issubclass, sequence_like
 
@@ -789,19 +790,21 @@ def field_singleton_schema(  # noqa: C901 (ignore complexity)
         f_schema['const'] = field.default
     field_type = field.type_
     if is_literal_type(field_type):
-        values = literal_values(field_type)
-        if len(values) > 1:
+        values = all_literal_values(field_type)
+
+        if len({v.__class__ for v in values}) > 1:
             return field_schema(
-                multivalue_literal_field_for_schema(values, field),
+                multitypes_literal_field_for_schema(values, field),
                 by_alias=by_alias,
                 model_name_map=model_name_map,
                 ref_prefix=ref_prefix,
                 ref_template=ref_template,
                 known_models=known_models,
             )
-        literal_value = values[0]
-        field_type = literal_value.__class__
-        f_schema['const'] = literal_value
+
+        # All values have the same type
+        field_type = values[0].__class__
+        f_schema['enum'] = list(values)
 
     if lenient_issubclass(field_type, Enum):
         enum_name = model_name_map[field_type]
@@ -859,10 +862,19 @@ def field_singleton_schema(  # noqa: C901 (ignore complexity)
     raise ValueError(f'Value not declarable with JSON Schema, field: {field}')
 
 
-def multivalue_literal_field_for_schema(values: Tuple[Any, ...], field: ModelField) -> ModelField:
+def multitypes_literal_field_for_schema(values: Tuple[Any, ...], field: ModelField) -> ModelField:
+    """
+    To support `Literal` with values of different types, we split it into multiple `Literal` with same type
+    e.g. `Literal['qwe', 'asd', 1, 2]` becomes `Union[Literal['qwe', 'asd'], Literal[1, 2]]`
+    """
+    literal_distinct_types = defaultdict(list)
+    for v in values:
+        literal_distinct_types[v.__class__].append(v)
+    distinct_literals = (Literal[tuple(same_type_values)] for same_type_values in literal_distinct_types.values())
+
     return ModelField(
         name=field.name,
-        type_=Union[tuple(Literal[value] for value in values)],  # type: ignore
+        type_=Union[tuple(distinct_literals)],  # type: ignore
         class_validators=field.class_validators,
         model_config=field.model_config,
         default=field.default,
diff --git a/pydantic/typing.py b/pydantic/typing.py
--- a/pydantic/typing.py
+++ b/pydantic/typing.py
@@ -203,7 +203,7 @@ def get_args(tp: Type[Any]) -> Tuple[Any, ...]:
     'resolve_annotations',
     'is_callable_type',
     'is_literal_type',
-    'literal_values',
+    'all_literal_values',
     'is_namedtuple',
     'is_typeddict',
     'is_new_type',

This is not really a bug in Pydantic. Pydantic generates valid JSON Schema.

OpenAPI uses an old version of JSON Schema that only supports enums.

But you can change your model to use an enum instead: https://pydantic-docs.helpmanual.io/usage/types/#enums-and-choices

It achieves the same and will generate a JSON Schema with enums, that is valid with OpenAPI.
Should we change pydantic so literal with multiple choices matches enum?
@tiangolo I agree, my concern is more about the benefit of the Literal type as a one-liner choice on a Pydantic/FastAPI/Swagger UI context.

@samuelcolvin If it breaks too many things, I would suggest a simple note in the documentation to avoid this unexpected behaviour (Literal with one element works well in fastapi context but not with multiple elements)
Please add a pr to improve the documentation.

We should change literals in V2.
> Should we change pydantic so literal with multiple choices matches enum?

@samuelcolvin actually that makes sense, a `Literal` generates a JSON Schema `const`, and it could only have a single value. So, yes, a multi-valued `Literal` *should* create a JSON Schema equivalent to an enum.
okay, do you think the change represents a "breaking change" that needs to wait for v2, or a bug fix than can go out in a minor version?
Sorry for the delay (still figuring out how to handle GitHub email notifications), I think that looks like a "bug fix" or extra feature that could go in a minor version.
Is there any progress? I have the same problem.
Not yet, would you like to submit a PR.
Hi guys, thanks for the research on this topics.

For us, this is right now a blocker to go to production (not fulfilling good practices in documentation)...
So would you mind to provide me a small hint on where to start in the code, I will take a look and let see if I can do a PR 😊 

Thanks again for the efforts!

@JavierMartinezAlc it looks like it is implemented [here](https://github.com/samuelcolvin/pydantic/blob/master/pydantic/schema.py#L778) and/or [there](https://github.com/samuelcolvin/pydantic/blob/master/pydantic/schema.py#L834)
diff --git a/tests/test_schema.py b/tests/test_schema.py
--- a/tests/test_schema.py
+++ b/tests/test_schema.py
@@ -1759,14 +1759,22 @@ class Model(BaseModel):
         a: Literal[1]
         b: Literal['a']
         c: Literal['a', 1]
+        d: Literal['a', Literal['b'], 1, 2]
 
     assert Model.schema() == {
         'properties': {
-            'a': {'title': 'A', 'type': 'integer', 'const': 1},
-            'b': {'title': 'B', 'type': 'string', 'const': 'a'},
-            'c': {'anyOf': [{'type': 'string', 'const': 'a'}, {'type': 'integer', 'const': 1}], 'title': 'C'},
+            'a': {'title': 'A', 'type': 'integer', 'enum': [1]},
+            'b': {'title': 'B', 'type': 'string', 'enum': ['a']},
+            'c': {'title': 'C', 'anyOf': [{'type': 'string', 'enum': ['a']}, {'type': 'integer', 'enum': [1]}]},
+            'd': {
+                'title': 'D',
+                'anyOf': [
+                    {'type': 'string', 'enum': ['a', 'b']},
+                    {'type': 'integer', 'enum': [1, 2]},
+                ],
+            },
         },
-        'required': ['a', 'b', 'c'],
+        'required': ['a', 'b', 'c', 'd'],
         'title': 'Model',
         'type': 'object',
     }

Multi-value Literal isn't compliant with OpenAPI
Multi-value Literal returns `const` in the JSON sub-schema of an `anyOf`, which isn't supported by OpenAPI:

> anyOf – the subschemas must be OpenAPI schemas and not standard JSON Schemas.


Output of `python -c "import pydantic.utils; print(pydantic.utils.version_info())"`:
```
             pydantic version: 1.4
            pydantic compiled: False
                 install path: /Users/[...]/venv/lib/python3.7/site-packages/pydantic
               python version: 3.7.4 (default, Sep  7 2019, 18:27:02)  [Clang 10.0.1 (clang-1001.0.46.4)]
                     platform: Darwin-18.7.0-x86_64-i386-64bit
     optional deps. installed: ['typing-extensions']

```

# Code to reproduce

```python
from pydantic import BaseModel
from typing_extensions import Literal

class FooBar(BaseModel):
    values: Literal["value_1", "value_2"]

print(FooBar.schema_json(indent=2))
```

output: 
```
{
  "title": "FooBar",
  "type": "object",
  "properties": {
    "values": {
      "title": "Values",
      "anyOf": [
        {
          "const": "value_1",
          "type": "string"
        },
        {
          "const": "value_2",
          "type": "string"
        }
      ]
    }
  },
  "required": [
    "values"
  ]
}
```

Literal with only one value is OpenAPI compliant btw

This issue is linked to: https://github.com/tiangolo/fastapi/issues/562, https://github.com/samuelcolvin/pydantic/pull/649 (the simple `enum` would work well)

tests/test_schema.py::test_literal_schema
tests/test_schema.py::test_key tests/test_schema.py::test_by_alias tests/test_schema.py::test_ref_template tests/test_schema.py::test_by_alias_generator tests/test_schema.py::test_sub_model tests/test_schema.py::test_schema_class tests/test_schema.py::test_schema_repr tests/test_schema.py::test_schema_class_by_alias tests/test_schema.py::test_choices tests/test_schema.py::test_enum_modify_schema tests/test_schema.py::test_enum_schema_custom_field tests/test_schema.py::test_enum_and_model_have_same_behaviour tests/test_schema.py::test_list_enum_schema_extras tests/test_schema.py::test_json_schema tests/test_schema.py::test_list_sub_model tests/test_schema.py::test_optional tests/test_schema.py::test_any tests/test_schema.py::test_set tests/test_schema.py::test_const_str tests/test_schema.py::test_const_false tests/test_schema.py::test_tuple[tuple-expected_schema0] tests/test_schema.py::test_tuple[field_type1-expected_schema1] tests/test_schema.py::test_tuple[field_type2-expected_schema2] tests/test_schema.py::test_bool tests/test_schema.py::test_strict_bool tests/test_schema.py::test_dict tests/test_schema.py::test_list tests/test_schema.py::test_list_union_dict[field_type0-expected_schema0] tests/test_schema.py::test_list_union_dict[field_type1-expected_schema1] tests/test_schema.py::test_list_union_dict[field_type2-expected_schema2] tests/test_schema.py::test_list_union_dict[field_type3-expected_schema3] tests/test_schema.py::test_list_union_dict[field_type4-expected_schema4] tests/test_schema.py::test_date_types[datetime-expected_schema0] tests/test_schema.py::test_date_types[date-expected_schema1] tests/test_schema.py::test_date_types[time-expected_schema2] tests/test_schema.py::test_date_types[timedelta-expected_schema3] tests/test_schema.py::test_str_basic_types[field_type0-expected_schema0] tests/test_schema.py::test_str_basic_types[field_type1-expected_schema1] tests/test_schema.py::test_str_basic_types[field_type2-expected_schema2] tests/test_schema.py::test_str_basic_types[field_type3-expected_schema3] tests/test_schema.py::test_str_constrained_types[StrictStr-expected_schema0] tests/test_schema.py::test_str_constrained_types[ConstrainedStr-expected_schema1] tests/test_schema.py::test_str_constrained_types[ConstrainedStrValue-expected_schema2] tests/test_schema.py::test_special_str_types[AnyUrl-expected_schema0] tests/test_schema.py::test_special_str_types[UrlValue-expected_schema1] tests/test_schema.py::test_email_str_types[EmailStr-email] tests/test_schema.py::test_email_str_types[NameEmail-name-email] tests/test_schema.py::test_secret_types[SecretBytes-string] tests/test_schema.py::test_secret_types[SecretStr-string] tests/test_schema.py::test_special_int_types[ConstrainedInt-expected_schema0] tests/test_schema.py::test_special_int_types[ConstrainedIntValue-expected_schema1] tests/test_schema.py::test_special_int_types[ConstrainedIntValue-expected_schema2] tests/test_schema.py::test_special_int_types[ConstrainedIntValue-expected_schema3] tests/test_schema.py::test_special_int_types[PositiveInt-expected_schema4] tests/test_schema.py::test_special_int_types[NegativeInt-expected_schema5] tests/test_schema.py::test_special_int_types[NonNegativeInt-expected_schema6] tests/test_schema.py::test_special_int_types[NonPositiveInt-expected_schema7] tests/test_schema.py::test_special_float_types[ConstrainedFloat-expected_schema0] tests/test_schema.py::test_special_float_types[ConstrainedFloatValue-expected_schema1] tests/test_schema.py::test_special_float_types[ConstrainedFloatValue-expected_schema2] tests/test_schema.py::test_special_float_types[ConstrainedFloatValue-expected_schema3] tests/test_schema.py::test_special_float_types[PositiveFloat-expected_schema4] tests/test_schema.py::test_special_float_types[NegativeFloat-expected_schema5] tests/test_schema.py::test_special_float_types[NonNegativeFloat-expected_schema6] tests/test_schema.py::test_special_float_types[NonPositiveFloat-expected_schema7] tests/test_schema.py::test_special_float_types[ConstrainedDecimal-expected_schema8] tests/test_schema.py::test_special_float_types[ConstrainedDecimalValue-expected_schema9] tests/test_schema.py::test_special_float_types[ConstrainedDecimalValue-expected_schema10] tests/test_schema.py::test_special_float_types[ConstrainedDecimalValue-expected_schema11] tests/test_schema.py::test_uuid_types[UUID-uuid] tests/test_schema.py::test_uuid_types[UUID1-uuid1] tests/test_schema.py::test_uuid_types[UUID3-uuid3] tests/test_schema.py::test_uuid_types[UUID4-uuid4] tests/test_schema.py::test_uuid_types[UUID5-uuid5] tests/test_schema.py::test_path_types[FilePath-file-path] tests/test_schema.py::test_path_types[DirectoryPath-directory-path] tests/test_schema.py::test_path_types[Path-path] tests/test_schema.py::test_json_type tests/test_schema.py::test_ipv4address_type tests/test_schema.py::test_ipv6address_type tests/test_schema.py::test_ipvanyaddress_type tests/test_schema.py::test_ipv4interface_type tests/test_schema.py::test_ipv6interface_type tests/test_schema.py::test_ipvanyinterface_type tests/test_schema.py::test_ipv4network_type tests/test_schema.py::test_ipv6network_type tests/test_schema.py::test_ipvanynetwork_type tests/test_schema.py::test_callable_type[type_0-default_value0] tests/test_schema.py::test_callable_type[type_1-<lambda>] tests/test_schema.py::test_callable_type[type_2-default_value2] tests/test_schema.py::test_callable_type[type_3-<lambda>] tests/test_schema.py::test_error_non_supported_types tests/test_schema.py::test_flat_models_unique_models tests/test_schema.py::test_flat_models_with_submodels tests/test_schema.py::test_flat_models_with_submodels_from_sequence tests/test_schema.py::test_model_name_maps tests/test_schema.py::test_schema_overrides tests/test_schema.py::test_schema_overrides_w_union tests/test_schema.py::test_schema_from_models tests/test_schema.py::test_schema_with_refs[#/components/schemas/-None] tests/test_schema.py::test_schema_with_refs[None-#/components/schemas/{model}] tests/test_schema.py::test_schema_with_refs[#/components/schemas/-#/{model}/schemas/] tests/test_schema.py::test_schema_with_custom_ref_template tests/test_schema.py::test_schema_ref_template_key_error tests/test_schema.py::test_schema_no_definitions tests/test_schema.py::test_list_default tests/test_schema.py::test_dict_default tests/test_schema.py::test_constraints_schema[kwargs0-str-expected_extra0] tests/test_schema.py::test_constraints_schema[kwargs1-ConstrainedStrValue-expected_extra1] tests/test_schema.py::test_constraints_schema[kwargs2-str-expected_extra2] tests/test_schema.py::test_constraints_schema[kwargs3-bytes-expected_extra3] tests/test_schema.py::test_constraints_schema[kwargs4-str-expected_extra4] tests/test_schema.py::test_constraints_schema[kwargs5-int-expected_extra5] tests/test_schema.py::test_constraints_schema[kwargs6-int-expected_extra6] tests/test_schema.py::test_constraints_schema[kwargs7-int-expected_extra7] tests/test_schema.py::test_constraints_schema[kwargs8-int-expected_extra8] tests/test_schema.py::test_constraints_schema[kwargs9-int-expected_extra9] tests/test_schema.py::test_constraints_schema[kwargs10-float-expected_extra10] tests/test_schema.py::test_constraints_schema[kwargs11-float-expected_extra11] tests/test_schema.py::test_constraints_schema[kwargs12-float-expected_extra12] tests/test_schema.py::test_constraints_schema[kwargs13-float-expected_extra13] tests/test_schema.py::test_constraints_schema[kwargs14-float-expected_extra14] tests/test_schema.py::test_constraints_schema[kwargs15-float-expected_extra15] tests/test_schema.py::test_constraints_schema[kwargs16-float-expected_extra16] tests/test_schema.py::test_constraints_schema[kwargs17-float-expected_extra17] tests/test_schema.py::test_constraints_schema[kwargs18-float-expected_extra18] tests/test_schema.py::test_constraints_schema[kwargs19-Decimal-expected_extra19] tests/test_schema.py::test_constraints_schema[kwargs20-Decimal-expected_extra20] tests/test_schema.py::test_constraints_schema[kwargs21-Decimal-expected_extra21] tests/test_schema.py::test_constraints_schema[kwargs22-Decimal-expected_extra22] tests/test_schema.py::test_constraints_schema[kwargs23-Decimal-expected_extra23] tests/test_schema.py::test_unenforced_constraints_schema[kwargs0-int] tests/test_schema.py::test_unenforced_constraints_schema[kwargs1-float] tests/test_schema.py::test_unenforced_constraints_schema[kwargs2-Decimal] tests/test_schema.py::test_unenforced_constraints_schema[kwargs3-bool] tests/test_schema.py::test_unenforced_constraints_schema[kwargs4-int] tests/test_schema.py::test_unenforced_constraints_schema[kwargs5-str] tests/test_schema.py::test_unenforced_constraints_schema[kwargs6-bytes] tests/test_schema.py::test_unenforced_constraints_schema[kwargs7-str] tests/test_schema.py::test_unenforced_constraints_schema[kwargs8-bool] tests/test_schema.py::test_unenforced_constraints_schema[kwargs9-type_9] tests/test_schema.py::test_unenforced_constraints_schema[kwargs10-type_10] tests/test_schema.py::test_unenforced_constraints_schema[kwargs11-ConstrainedListValue] tests/test_schema.py::test_unenforced_constraints_schema[kwargs12-ConstrainedSetValue] tests/test_schema.py::test_constraints_schema_validation[kwargs0-str-foo] tests/test_schema.py::test_constraints_schema_validation[kwargs1-str-foo] tests/test_schema.py::test_constraints_schema_validation[kwargs2-bytes-foo] tests/test_schema.py::test_constraints_schema_validation[kwargs3-str-foo] tests/test_schema.py::test_constraints_schema_validation[kwargs4-int-3] tests/test_schema.py::test_constraints_schema_validation[kwargs5-int-3] tests/test_schema.py::test_constraints_schema_validation[kwargs6-int-3] tests/test_schema.py::test_constraints_schema_validation[kwargs7-int-2] tests/test_schema.py::test_constraints_schema_validation[kwargs8-int-3] tests/test_schema.py::test_constraints_schema_validation[kwargs9-int-3] tests/test_schema.py::test_constraints_schema_validation[kwargs10-int-5] tests/test_schema.py::test_constraints_schema_validation[kwargs11-float-3.0] tests/test_schema.py::test_constraints_schema_validation[kwargs12-float-2.1] tests/test_schema.py::test_constraints_schema_validation[kwargs13-float-3.0] tests/test_schema.py::test_constraints_schema_validation[kwargs14-float-4.9] tests/test_schema.py::test_constraints_schema_validation[kwargs15-float-3.0] tests/test_schema.py::test_constraints_schema_validation[kwargs16-float-2.0] tests/test_schema.py::test_constraints_schema_validation[kwargs17-float-3.0] tests/test_schema.py::test_constraints_schema_validation[kwargs18-float-5.0] tests/test_schema.py::test_constraints_schema_validation[kwargs19-float-3] tests/test_schema.py::test_constraints_schema_validation[kwargs20-float-3] tests/test_schema.py::test_constraints_schema_validation[kwargs21-Decimal-value21] tests/test_schema.py::test_constraints_schema_validation[kwargs22-Decimal-value22] tests/test_schema.py::test_constraints_schema_validation[kwargs23-Decimal-value23] tests/test_schema.py::test_constraints_schema_validation[kwargs24-Decimal-value24] tests/test_schema.py::test_constraints_schema_validation[kwargs25-Decimal-value25] tests/test_schema.py::test_constraints_schema_validation[kwargs26-Decimal-value26] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs0-str-foobar] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs1-str-f] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs2-str-bar] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs3-int-2] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs4-int-5] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs5-int-1] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs6-int-6] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs7-float-2.0] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs8-float-5.0] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs9-float-1.9] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs10-float-5.1] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs11-Decimal-value11] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs12-Decimal-value12] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs13-Decimal-value13] tests/test_schema.py::test_constraints_schema_validation_raises[kwargs14-Decimal-value14] tests/test_schema.py::test_schema_kwargs tests/test_schema.py::test_schema_dict_constr tests/test_schema.py::test_bytes_constrained_types[ConstrainedBytes-expected_schema0] tests/test_schema.py::test_bytes_constrained_types[ConstrainedBytesValue-expected_schema1] tests/test_schema.py::test_optional_dict tests/test_schema.py::test_optional_validator tests/test_schema.py::test_field_with_validator tests/test_schema.py::test_unparameterized_schema_generation tests/test_schema.py::test_known_model_optimization tests/test_schema.py::test_root tests/test_schema.py::test_root_list tests/test_schema.py::test_root_nested_model tests/test_schema.py::test_new_type_schema tests/test_schema.py::test_color_type tests/test_schema.py::test_model_with_schema_extra tests/test_schema.py::test_model_with_schema_extra_callable tests/test_schema.py::test_model_with_schema_extra_callable_no_model_class tests/test_schema.py::test_model_with_schema_extra_callable_classmethod tests/test_schema.py::test_model_with_schema_extra_callable_instance_method tests/test_schema.py::test_model_with_extra_forbidden tests/test_schema.py::test_enforced_constraints[int-kwargs0-field_schema0] tests/test_schema.py::test_enforced_constraints[annotation1-kwargs1-field_schema1] tests/test_schema.py::test_enforced_constraints[annotation2-kwargs2-field_schema2] tests/test_schema.py::test_enforced_constraints[annotation3-kwargs3-field_schema3] tests/test_schema.py::test_enforced_constraints[annotation4-kwargs4-field_schema4] tests/test_schema.py::test_enforced_constraints[annotation5-kwargs5-field_schema5] tests/test_schema.py::test_enforced_constraints[annotation6-kwargs6-field_schema6] tests/test_schema.py::test_enforced_constraints[annotation7-kwargs7-field_schema7] tests/test_schema.py::test_real_vs_phony_constraints tests/test_schema.py::test_subfield_field_info tests/test_schema.py::test_dataclass tests/test_schema.py::test_schema_attributes tests/test_schema.py::test_model_process_schema_enum tests/test_schema.py::test_path_modify_schema tests/test_schema.py::test_frozen_set tests/test_schema.py::test_iterable tests/test_schema.py::test_new_type tests/test_schema.py::test_multiple_models_with_same_name tests/test_schema.py::test_multiple_enums_with_same_name tests/test_schema.py::test_schema_for_generic_field