Mysql

MySQL 不讀取 ~/.my.cnf 中的使用者特定選項

  • March 12, 2018

我希望伺服器每次啟動時都執行一個初始 SQL 查詢:

[mysqld]
init-connect='SET NAMES utf8mb4'

我希望它只是使用者特定的而不是全域的。所以我在使用者的主目錄(~/.my.cnf)中創建了一個 .my.cnf,但是當我嘗試查看它是否影響了伺服器時,它沒有顯示我添加的設置,而且似乎我的設置被伺服器忽略了:

   mysqld --print-defaults
------------------------------------
--user=mysql 
--pid-file=/var/run/mysqld/mysqld.pid 
--socket=/var/run/mysqld/mysqld.sock 
--port=3306 
--basedir=/usr 
--datadir=/var/lib/mysql 
--tmpdir=/tmp 
--lc-messages-dir=/usr/share/mysql 
--skip-external-locking 
--bind-address=0.0.0.0 --

key_buffer_size=16M 
--max_allowed_packet=16M 
--thread_stack=192K 
--thread_cache_size=8 
--myisam-recover-options=BACKUP 
--query_cache_limit=1M 
--query_cache_size=16M 
--log_error=/var/log/mysql/error.log 
--expire_logs_days=10 
--max_binlog_s

ize=100M 
--default_password_lifetime=0

這也是以下結果 SHOW VARIABLES LIKE 'character_set_%';

在此處輸入圖像描述

我希望將這些參數設置為'utf8mb4'觀察伺服器啟動的時間。

character_set_client
character_set_results
character_set_connection

我也應該說我使用Laravel Vagrant作為我的開發環境

init-connect當您以 MySQLroot使用者身份連接時將被忽略。

檢查config/database.phpLaravel 的文件。它需要這樣說:'mysql' => [..., 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', ...]

使用 mysql 客戶端,要使用不同於預設字元集的字元集,您可以在SET NAMES每次啟動時顯式執行。

要更輕鬆地完成相同的結果,請將--default-character-set選項設置添加到 mysql 命令行或選項文件中。例如,以下選項文件設置會在koi8r每次呼叫 mysql 時更改三個與連接相關的字元集變數設置:

[mysql]
default-character-set=koi8r  

如果您使用啟用了自動重新連接的 mysql 客戶端(不推薦),最好使用 charset 命令而不是SET NAMES. 例如:

mysql> charset utf8

Charset changed

charset 命令發出一條SET NAMES語句,並更改 mysql 在連接斷開後重新連接時使用的預設字元集。

引用自:https://dba.stackexchange.com/questions/199973