> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Permet de se connecter à des bases de données hébergées sur un serveur MySQL distant et d’exécuter des requêtes `INSERT` et `SELECT` pour échanger des données entre ClickHouse et MySQL.

# MySQL

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Non pris en charge par ClickHouse Cloud
        </a>;
};

<CloudNotSupportedBadge />

Permet de se connecter à des bases de données hébergées sur un serveur MySQL distant et d’exécuter des requêtes `INSERT` et `SELECT` pour échanger des données entre ClickHouse et MySQL.

Le moteur de base de données `MySQL` traduit les requêtes pour le serveur MySQL, ce qui vous permet d’effectuer des opérations telles que `SHOW TABLES` ou `SHOW CREATE TABLE`.

Vous ne pouvez pas exécuter les requêtes suivantes :

* `RENAME`
* `CREATE TABLE`
* `ALTER`

<div id="creating-a-database">
  ## Création d’une base de données
</div>

```sql theme={null}
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]
```

**Paramètres du moteur**

* `host:port` — Adresse du serveur MySQL.
* `database` — Nom de la base de données distante.
* `user` — Utilisateur MySQL.
* `password` — Mot de passe de l’utilisateur.

**Réglages**

<div id="enable-compression">
  ### `enable_compression`
</div>

Active la compression zlib pour la connexion via le protocole MySQL. Lorsqu’elle est définie sur `1`, ClickHouse demande au serveur MySQL une compression au niveau du protocole.

Valeur par défaut : `0`.

Exemple :

```sql theme={null}
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;
```

<div id="tls-ssl">
  ## TLS/SSL
</div>

Les identifiants d'une connexion chiffrée à MySQL sont transmis sous forme de clés de [collection nommée](/fr/concepts/features/configuration/server-config/named-collections) (ou d'arguments clé-valeur) :

| Paramètre      | Description                                                                         |
| -------------- | ----------------------------------------------------------------------------------- |
| `ssl_ca_pem`   | Contenu du certificat de l'AC utilisé pour vérifier le certificat du serveur MySQL. |
| `ssl_cert_pem` | Contenu du certificat client, pour l'authentification par certificat.               |
| `ssl_key_pem`  | Contenu de la clé privée associée à `ssl_cert_pem`.                                 |

Les valeurs correspondent au contenu des fichiers PEM associés, qui peut être copié dans une collection nommée ou dans une requête. Elles sont masquées dans les journaux et les requêtes `SHOW`, de la même manière que les mots de passe.

Les mêmes identifiants peuvent également être fournis sous forme de chemins vers des fichiers sur le serveur, dans `ssl_ca`, `ssl_cert` et `ssl_key` — mais **uniquement dans une collection nommée définie dans le fichier de configuration du serveur** ; une telle valeur ne peut pas être remplacée dans une requête. Le serveur ouvre ces fichiers avec ses propres privilèges. Accepter un chemin depuis SQL permettrait donc à tout utilisateur capable de définir une source MySQL d'explorer le système de fichiers local et de s'authentifier avec un certificat et une clé auxquels il n'est pas lui-même autorisé à accéder.

<a id="data_types-support" />

<div id="data-types-support">
  ## Prise en charge des types de données
</div>

| MySQL                            | ClickHouse                                                      |
| -------------------------------- | --------------------------------------------------------------- |
| UNSIGNED TINYINT                 | [UInt8](/fr/reference/data-types/int-uint)                      |
| TINYINT                          | [Int8](/fr/reference/data-types/int-uint)                       |
| UNSIGNED SMALLINT                | [UInt16](/fr/reference/data-types/int-uint)                     |
| SMALLINT                         | [Int16](/fr/reference/data-types/int-uint)                      |
| UNSIGNED INT, UNSIGNED MEDIUMINT | [UInt32](/fr/reference/data-types/int-uint)                     |
| INT, MEDIUMINT                   | [Int32](/fr/reference/data-types/int-uint)                      |
| UNSIGNED BIGINT                  | [UInt64](/fr/reference/data-types/int-uint)                     |
| BIGINT                           | [Int64](/fr/reference/data-types/int-uint)                      |
| FLOAT                            | [Float32](/fr/reference/data-types/float)                       |
| DOUBLE                           | [Float64](/fr/reference/data-types/float)                       |
| DATE                             | [Date](/fr/reference/data-types/date)                           |
| DATETIME, TIMESTAMP              | [DateTime](/fr/reference/data-types/datetime)                   |
| BINARY                           | [FixedString](/fr/reference/data-types/fixedstring)             |
| POINT                            | [Point](/fr/reference/data-types/geo#point)                     |
| LINESTRING                       | [LineString](/fr/reference/data-types/geo#linestring)           |
| POLYGON                          | [Polygon](/fr/reference/data-types/geo#polygon)                 |
| MULTILINESTRING                  | [MultiLineString](/fr/reference/data-types/geo#multilinestring) |
| MULTIPOLYGON                     | [MultiPolygon](/fr/reference/data-types/geo#multipolygon)       |
| MULTIPOINT                       | [MultiPoint](/fr/reference/data-types/geo#multipoint)           |
| GEOMETRY                         | [Geometry](/fr/reference/data-types/geo#geometry)               |

La conversion des types spatiaux (à l’exception de `POINT`, qui est toujours converti) est contrôlée par l’option `geometry` du paramètre [`mysql_datatypes_support_level`](/fr/reference/settings/session-settings/mysql#mysql_datatypes_support_level), activée par défaut. Le type de colonne générique `GEOMETRY` est mappé au type englobant [`Geometry`](/fr/reference/data-types/geo#geometry) (un `Variant` des types géométriques concrets). Comme une telle colonne peut contenir une valeur de n’importe quel sous-type, la lecture d’une valeur dont le sous-type n’a pas d’équivalent dans ClickHouse (`GEOMETRYCOLLECTION`) déclenche une exception lors de la lecture ; cette incompatibilité est acceptée en contrepartie d’un type géométrique approprié. Les colonnes déclarées avec le type `GEOMETRYCOLLECTION` sont converties en [String](/fr/reference/data-types/string), comme tous les autres types de données MySQL.

[Nullable](/fr/reference/data-types/nullable) est pris en charge. Une colonne spatiale est mappée à `String` (`Nullable(String)` si elle accepte les valeurs nulles) au lieu d’un type géométrique dans trois cas : elle est déclarée `GEOMETRYCOLLECTION` ; l’option `geometry` est désactivée et le type n’est pas `POINT` ; ou la colonne accepte les valeurs nulles et le type n’est pas `POINT`, car `Point` est le seul type géométrique qui peut être imbriqué dans `Nullable`. Dans les trois cas, la chaîne contient la valeur exactement telle que MySQL la renvoie : un préfixe SRID de 4 octets suivi du payload WKB. Supprimez donc ces 4 octets initiaux avant de la transmettre à un décodeur WKB.

<div id="global-variables-support">
  ## Prise en charge des variables globales
</div>

Pour une meilleure compatibilité, vous pouvez référencer les variables globales dans le style MySQL, sous la forme `@@identifier`.

Ces variables sont prises en charge :

* `version`
* `max_allowed_packet`

<Note>
  À ce jour, ces variables sont des stubs et ne correspondent à rien.
</Note>

Exemple :

```sql theme={null}
SELECT @@version;
```

<div id="examples-of-use">
  ## Exemples d’utilisation
</div>

Table dans MySQL :

```text theme={null}
mysql> USE test;
Database changed

mysql> CREATE TABLE `mysql_table` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
|      1 |     2 |
+------+-----+
1 row in set (0,00 sec)
```

Base de données ClickHouse échangeant des données avec le serveur MySQL :

```sql theme={null}
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;
```

```sql theme={null}
SHOW DATABASES
```

```text theme={null}
┌─name─────┐
│ default  │
│ mysql_db │
│ system   │
└──────────┘
```

```sql theme={null}
SHOW TABLES FROM mysql_db
```

```text theme={null}
┌─name─────────┐
│  mysql_table │
└──────────────┘
```

```sql theme={null}
SELECT * FROM mysql_db.mysql_table
```

```text theme={null}
┌─int_id─┬─value─┐
│      1 │     2 │
└────────┴───────┘
```

```sql theme={null}
INSERT INTO mysql_db.mysql_table VALUES (3,4)
```

```sql theme={null}
SELECT * FROM mysql_db.mysql_table
```

```text theme={null}
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘
```
