Mysql 如何更改default collation_connection setting
客戶端連線到伺服器時,如何更改預設的“ collation_connection”設定,這會影響文字和函式。
按照設計,collation_connection設定為每個客戶端指定的字符集的預設排序規則。例如,如果伺服器版本為8.0,並且客戶端指定了utf8mb4,則在建立連線後,collation_connection將為utf8mb4_0900_ai_ci。客戶端只能指定字符集,不能在連線時指定排序規則。如果您想更改預設的collation_connection,您需要發出SET NAMES命令,如下所示
mysql> SET NAMES utf8mb4 COLLATE utf8mb4_ja_0900_as_cs_ks;
通常,應用程式 只需要使用一種歸類。如果應用程式需要一個collation_connection,如utf8mb4_ja_0900_as_cs_ks,但當前的collation_connection設定為utf8mb4_0900_ai_ci,則 可能會得到錯誤的結果。這是一個非常糟糕的情況。因此,您可能希望讓伺服器為每個連線設定所需的排序規則。
為此,有以下方法:
1.在每次連線時發出 SET NAMES
如上所述,可以使用SET NAMES命令更改collation_connection。您可以在每次連線時使用 初始化連線選項。雖然init_connect選項 不影響擁有SUPER或CONNECTION_ADMIN許可權的使用者,但是該選項對於應用程式使用者來說已經足夠了。在這種情況下,您可以在my.cnf中設定選項,如下所示:
[mysqld] init_connect=SET NAMES utf8mb4 COLLATE utf8mb4_ja_0900_as_cs_ks
您需要重新啟動MySQL伺服器來應用my.cnf中的配置更改 設定全域性 命令:
mysql> SET GLOBAL init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_ja_0900_as_cs_ks';
您還可以在MySQL 8.0上使用SET PERSIST命令來使配置更改持久化。
有關init_connect選項的更多資訊,請參見以下手冊: https://dev.mysql.com/doc/refman/en/server-system-variables.html#sysvar_init_connect
2.使用 using skip_character_set_client_handshake 選項應用全域性設定
當未指定skip _ character _ set _ client _ handshake選項時,歸類設定為每個客戶端指定的字符集的預設歸類。當指定skip _ character _ set _ client _ handshake選項時,將 忽略客戶端字符集,並在連線時應用伺服器設定。由於skip _ character _ set _ client _ handshake選項是隻讀選項,您需要將它新增到my.cnf中,並重新啟動伺服器以啟用該選項,如下所示:
[mysqld] skip_character_set_client_handshake
當 skip_character_set_client_handshake 生效時,從全域性系統變數中複製 character_set_client, character_set_results, and collation_connection 。有關 skip_character_set_client_handshake選項的更多詳細資訊,請參見參考手冊: https://dev.mysql.com/doc/refman/en/server-options.html#option_mysqld_character-set-client-handshake
您可以設定全域性級別的collation_connection系統變數,如下所示;請注意,您必須首先更改字符集:
mysql> SET GLOBAL character_set_connection=utf8mb4; mysql> SET GLOBAL collation_connection=utf8mb4_ja_0900_as_cs_ks;
但是,不能在my.cnf中設定collation_connection,因為它不是啟動選項。所以,你需要在伺服器以某種方式重啟時設定它。
在MySQL 8.0系列上,可以使用 設定持續命令如下:
mysql> SET PERSIST character_set_connection=utf8mb4; mysql> SET PERSIST collation_connection=utf8mb4_ja_0900_as_cs_ks;
SET PERSIST使全域性系統變數持久化,而不是用於啟動選項。雖然collation_connection不是啟動選項,而是具有全域性級別範圍的系統變數,但是可以使用SET PERSIST。
如果您使用的是 MySQL 5.7或更早版本,init_file選項是一個不錯的選擇。它指定了一個包含伺服器啟動時執行的命令的檔案。您可以指定 初始化檔案my.cnf中的選項如下:
[mysqld] init_file=/path/to/init_file.sql
檔案的內容可以像下面這樣:
SET GLOBAL character_set_connection=utf8mb4; SET GLOBAL collation_connection=utf8mb4_ja_0900_as_cs_ks;
總結: 保證服務端與客戶端使用統一的資料庫字符集與編碼,可以在 my.cnf / mysql 8 SET PERSIST / init_file 新增如下配置。
#my.cnf引數配置 character_set_server = utf8mb4 collation-server = utf8mb4_general_ci init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_general_ci' skip-character-set-client-handshake
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2983558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql default unix_timestamp(now())MySql
- [MySQLFAQ]系列–如何更改MySQL的預設字符集MySql
- mysql-欄位設定Default值問題MySql
- sendmail settingAI
- MySQL 報錯MySQL server syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT'MySqlServerMIT
- mongodb如何更改埠號MongoDB
- SMART Goal SettingGo
- 公司網站如何更改內容公司網站如何更改內容資訊網站
- 更改MySQL資料檔案目錄位置MySql
- win10 如何更改輸入法 win10 如何更改輸入法Win10
- 如何更改註冊的emailAI
- 如何更改預設的Clientclient
- Procedure for Setting Partner FunctionsFunction
- 阿里雲setting阿里
- Oracle default usersOracle
- switch default 作用
- export default用法Export
- default gateway is not definedGateway
- 更改MYSQL使用者名稱密碼MySql密碼
- Linux中如何更改MAC地址LinuxMac
- ASM Setting Larger AU SizesASM
- SAPGUI for Java Connect settingGUIJava
- Xcode的build settingXCodeUI
- Setting the Database Time Zone (80)Database
- vue2 setting配置Vue
- Django中更改預設資料庫為mysqlDjango資料庫MySql
- MySQL 5.5更改使用者密碼方法MySql密碼
- 更改MYSQL資料庫不區分大小寫MySql資料庫
- 更改MySql表和欄位區分大小寫MySql
- 更改MySQL資料檔案存放目錄位置MySql
- 聊聊Oracle Default RoleOracle
- mysql-timestamp 0000-00-00 00:00:00 Invalid default valueMySql
- MySQL 5.7 Invalid default value for 'CREATE_TIME'報錯的解決方法MySql
- 如何在 Linux 中更改 MAC 地址LinuxMac
- 如何快速更改螢幕解鎖特效特效
- win7中如何更改時間Win7
- 如何更改oracle監聽器的埠Oracle
- 更改/etc/init.d/mysql,讓HeartBeat只是監控MYSQL的狀態MySql