包含mysql資料庫utf8mb4的詞條

本文目錄一覽:

如何在mysql中存取utf8mb4編碼的字元

utf8編碼可以支持一到4位元組的字元編碼,在mysql用我們一般使用utf8編碼來處理字元類型,通常情況下都沒有問題,但遇到4位元組編碼的字元,在數據存取的時候就會有問題了。

通常我們可能會得到一個錯誤或者警告:Incorrect

string

value:

‘\xF0\x9D\x8C\x86’

for

column

Mysql

從5.5.3版本開始支持4位元組的utf8編碼,如果你的Mysql資料庫是5.5.3+,按照以下步驟就能解決這個問題,如果版本低於5.5.3,是不是可以考慮升級資料庫版本呢?

1、在修改資料庫編碼前先對資料庫備份(雖然utf8mb4兼容utf8,但有備無患)

2、修改資料庫的編碼、表的編碼、列的編碼為utf8mb4

3、在Mysql資料庫配置文件(my.ini)中加入如下設置

[client]

default-character-set

=

utf8mb4

[mysql]

default-character-set

=

utf8mb4

[mysqld]

character-set-client-handshake

=

FALSE

character-set-server

=

utf8mb4

collation-server

=

utf8mb4_unicode_ci

重新啟動Mysql資料庫,確認設置生效

mysql

show

VARIABLES

like

‘%char%’;

+————————–+—————————————-+

|

Variable_name

|

Value

|

+————————–+—————————————-+

|

character_set_client

|

utf8

|

|

character_set_connection

|

utf8

|

|

character_set_database

|

utf8mb4

|

|

character_set_filesystem

|

binary

|

|

character_set_results

|

utf8

|

|

character_set_server

|

utf8mb4

|

|

character_set_system

|

utf8

|

|

character_sets_dir

|

/home/app/mysql-5.5.33/share/charsets/

|

+————————–+—————————————-+

8

rows

in

set

4、在獲取資料庫連接的時候執行sql:set

names

utf8mb4;我使用的是alibaba的開源資料庫連接池程序,在配置文件中增加一行如下配置

property

name=”connectionInitSqls”

value=”set

names

utf8mb4;”

/

重新啟動應用程序,問題解決,轉載,僅供參考。

mysql 5.7怎麼設置成utf8mb4

整理 MySQL 8.0 文檔時發現一個變更:

默認字符集由 latin1 變為 utf8mb4。想起以前整理過字符集轉換文檔,升級到 MySQL 8.0 後大概率會有字符集轉換的需求,在此正好分享一下。

當時的需求背景是:

部分系統使用的字符集是 utf8,但 utf8 最多只能存 3 位元組長度的字元,不能存放 4 位元組的生僻字或者表情符號,因此打算遷移到 utf8mb4。

遷移方案一1. 準備新的資料庫實例,修改以下參數:[mysqld]## Character Settingsinit_connect=’SET NAMES utf8mb4’#連接建立時執行設置的語句,對super許可權用戶無效character-set-server = utf8mb4collation-server = utf8mb4_general_ci#設置服務端校驗規則,如果字元串需要區分大小寫,設置為utf8mb4_binskip-character-set-client-handshake#忽略應用連接自己設置的字元編碼,保持與全局設置一致## Innodb Settingsinnodb_file_format = Barracudainnodb_file_format_max = Barracudainnodb_file_per_table = 1innodb_large_prefix = ON#允許索引的最大位元組數為3072(不開啟則最大為767位元組,對於類似varchar(255)欄位的索引會有問題,因為255*4大於767)

2. 停止應用,觀察,確認不再有數據寫入

可通過 show master status 觀察 GTID 或者 binlog position,沒有變化則沒有寫入。

3. 導出數據

先導出表結構:mysqldump -u -p –no-data –default-character-set=utf8mb4 –single-transaction –set-gtid-purged=OFF –databases testdb /backup/testdb.sql

後導出數據:mysqldump -u -p –no-create-info –master-data=2 –flush-logs –routines –events –triggers –default-character-set=utf8mb4 –single-transaction –set-gtid-purged=OFF –database testdb /backup/testdata.sql

4. 修改建表語句

修改導出的表結構文件,將表、列定義中的 utf8 改為 utf8mb4

5. 導入數據

先導入表結構:mysql -u -p testdb /backup/testdb.sql

後導入數據:mysql -u -p testdb /backup/testdata.sql

6. 建用戶

查出舊環境的資料庫用戶,在新資料庫中創建

7. 修改新資料庫埠,啟動應用進行測試

關閉舊資料庫,修改新資料庫埠重啟,啟動應用

如何mysql 5.7的編碼設置成utf8mb4

整理 MySQL 8.0 文檔時發現一個變更:

默認字符集由 latin1 變為 utf8mb4。想起以前整理過字符集轉換文檔,升級到 MySQL 8.0 後大概率會有字符集轉換的需求,在此正好分享一下。

當時的需求背景是:

部分系統使用的字符集是 utf8,但 utf8 最多只能存 3 位元組長度的字元,不能存放 4 位元組的生僻字或者表情符號,因此打算遷移到 utf8mb4。

遷移方案一1. 準備新的資料庫實例,修改以下參數:[mysqld]## Character Settingsinit_connect=’SET NAMES utf8mb4’#連接建立時執行設置的語句,對super許可權用戶無效character-set-server = utf8mb4collation-server = utf8mb4_general_ci#設置服務端校驗規則,如果字元串需要區分大小寫,設置為utf8mb4_binskip-character-set-client-handshake#忽略應用連接自己設置的字元編碼,保持與全局設置一致## Innodb Settingsinnodb_file_format = Barracudainnodb_file_format_max = Barracudainnodb_file_per_table = 1innodb_large_prefix = ON#允許索引的最大位元組數為3072(不開啟則最大為767位元組,對於類似varchar(255)欄位的索引會有問題,因為255*4大於767)

2. 停止應用,觀察,確認不再有數據寫入

可通過 show master status 觀察 GTID 或者 binlog position,沒有變化則沒有寫入。

3. 導出數據

先導出表結構:mysqldump -u -p –no-data –default-character-set=utf8mb4 –single-transaction –set-gtid-purged=OFF –databases testdb /backup/testdb.sql

後導出數據:mysqldump -u -p –no-create-info –master-data=2 –flush-logs –routines –events –triggers –default-character-set=utf8mb4 –single-transaction –set-gtid-purged=OFF –database testdb /backup/testdata.sql

4. 修改建表語句

修改導出的表結構文件,將表、列定義中的 utf8 改為 utf8mb4

5. 導入數據

先導入表結構:mysql -u -p testdb /backup/testdb.sql

後導入數據:mysql -u -p testdb /backup/testdata.sql

6. 建用戶

查出舊環境的資料庫用戶,在新資料庫中創建

7. 修改新資料庫埠,啟動應用進行測試

關閉舊資料庫,修改新資料庫埠重啟,啟動應用

原創文章,作者:O17QK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128670.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
O17QK的頭像O17QK
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論