#### 4.2.2.6 选项默认值、选项期望值和 = 符号

按照惯例，赋值的长形式的选项用等号 (`=`) 符号，如下所示：

```
mysql --host=tonfisk --user=jon
```

对于需要值（即没有默认值）的选项，等号不是必需的，因此以下也是有效的：

```
mysql --host tonfisk --user jon
```

在这两种情况下，[**mysql**](mysql.html)客户端尝试使用用户名为“jon”的帐户连接到在名为“tonfisk”的主机上运行的 MySQL 服务器。

由于这种行为，当没有为期望值的选项提供值时，偶尔会出现问题。考虑以下示例，其中用户连接到在主机上运行的 MySQL 服务器`汤菲斯克`作为用户`乔恩`：

```
$> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@%          |
+----------------+
1 row in set (0.00 sec)
```

省略这些选项之一的所需值会产生错误，例如此处显示的错误：

```
$> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument
```

在这种情况下，[**mysql**](mysql.html)无法找到以下值[`- 用户`](connection-options.html#option_general_user)选项，因为在命令行之后没有任何内容。但是，如果您省略选项的值*不是*最后一个使用的选项，你会得到一个你可能没有预料到的错误：

```
$> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
```

因为[**mysql**](mysql.html)假定以下任何字符串[`- 主持人`](connection-options.html#option_general_host)命令行上是主机名，[`- 主持人`](connection-options.html#option_general_host) [`- 用户`](connection-options.html#option_general_user)被解释为[`--主机=--用户`](connection-options.html#option_general_host)，并且客户端尝试连接到运行在名为“--user”的主机上的 MySQL 服务器。

具有默认值的选项在赋值时总是需要等号；不这样做会导致错误。例如 MySQL 服务器[`--日志错误`](server-options.html#option_mysqld_log-error)选项具有默认值`*`主机名`*。呃`， 在哪里*`主机名`*是运行 MySQL 的主机的名称。假设您在主机名为“tonfisk”的计算机上运行 MySQL，并考虑以下调用[**mysqld\_安全的**](mysqld-safe.html)：

```
$> mysqld_safe &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>
```

关闭服务器后，按如下方式重新启动：

```
$> mysqld_safe --log-error &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>
```

结果是一样的，因为[`--日志错误`](mysqld-safe.html#option_mysqld_safe_log-error)在命令行上没有任何其他内容，它提供自己的默认值。（这`&`字符告诉操作系统在后台运行 MySQL；MySQL 本身会忽略它。）现在假设您希望将错误记录到一个名为`我的错误.err`.您可以尝试使用`--log-error 我的错误`，但这并没有达到预期的效果，如下所示：

```
$> mysqld_safe --log-error my-errors &
[1] 31357
$> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

[1]+  Done                    ./mysqld_safe --log-error my-errors
```

服务器尝试开始使用`/usr/local/mysql/var/tonfisk.err`作为错误日志，但随后关闭。检查此文件的最后几行显示原因：

```
$> tail /usr/local/mysql/var/tonfisk.err
2013-09-24T15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is 'my-errors').
2013-09-24T15:36:22.278059Z 0 [Note] Use --verbose --help to get a list of available options!
2013-09-24T15:36:22.278076Z 0 [ERROR] Aborting
2013-09-24T15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown...
2013-09-24T15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086
2013-09-24T15:36:23.780134Z 0 [Note] mysqld: Shutdown complete
```

因为[`--日志错误`](mysqld-safe.html#option_mysqld_safe_log-error)选项提供默认值，您必须使用等号为其分配不同的值，如下所示：

```
$> mysqld_safe --log-error=my-errors &
[1] 31437
$> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

$>
```

现在服务器已成功启动，并将错误记录到文件中`/usr/local/mysql/var/my-errors.err`.

在选项文件中指定选项值时可能会出现类似问题。例如，考虑一个`我的.cnf`包含以下内容的文件：

```
[mysql]

host
user
```

当。。。的时候[**mysql**](mysql.html)客户端读取此文件，这些条目被解析为[`- 主持人`](mysql-command-options.html#option_mysql_host) [`- 用户`](mysql-command-options.html#option_mysql_user)要么[`--主机=--用户`](mysql-command-options.html#option_mysql_host)，结果如下所示：

```
$> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
```

但是，在选项文件中，不假定使用等号。假设`我的.cnf`文件如下所示：

```
[mysql]

user jon
```

试图开始[**mysql**](mysql.html)在这种情况下会导致不同的错误：

```
$> mysql
mysql: unknown option '--user jon'
```

如果您要编写，则会发生类似的错误`主机 tonfisk`在选项文件中而不是`主机=tonfisk`.相反，您必须使用等号：

```
[mysql]

user=jon
```

现在登录尝试成功：

```
$> mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)
```

这与命令行的行为不同，命令行不需要等号：

```
$> mysql --user jon --host tonfisk
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@tonfisk   |
+---------------+
1 row in set (0.00 sec)
```

在选项文件中指定需要值但没有值的选项会导致服务器中止并出现错误。
